Thread View: pl.comp.lang.php
21 messages
21 total messages
Started by jivanmukta
Sun, 21 Jun 2015 16:02
if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Sun, 21 Jun 2015 16:02
Date: Sun, 21 Jun 2015 16:02
6 lines
1396 bytes
1396 bytes
Uczę się PHP5 i mam proste pytanie. Co właściwie znaczy instrukcja:
if ($x) { ... }
Czy ten test jest równoważny ((bool)$x) czy (!empty($x)) a może ($x !== false).
(Nie wiem jak to prosto sprawdzić). Byłbym wdzięczny za odpowiedź.
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Sun, 21 Jun 2015 16:04
Date: Sun, 21 Jun 2015 16:04
3 lines
1313 bytes
1313 bytes
W C takie coś znaczyło if (x != 0) ale jak jest w PHP5 to nie wiem.
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: artiun
Date: Sun, 21 Jun 2015 16:18
Date: Sun, 21 Jun 2015 16:18
15 lines
2228 bytes
2228 bytes
W dniu 2015-06-21 o 18:02, jivanmukta@poczta.onet.pl pisze:
> Uczę się PHP5 i mam proste pytanie. Co właściwie znaczy instrukcja:
>
> if ($x) { ... }
>
> Czy ten test jest równoważny ((bool)$x) czy (!empty($x)) a może ($x !== false).
> (Nie wiem jak to prosto sprawdzić). Byłbym wdzięczny za odpowiedź.
>
w nawiasie jest wyrażenie które zwraca true lub false, 0, 1. Może byś np.
string "" taki lub taki "ala".
--
Artur
0 weeks 0 days 8 hours 1 minute 33 seconds and 267 milliseconds.
"pl.comp.lang.php"
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Sun, 21 Jun 2015 17:06
Date: Sun, 21 Jun 2015 17:06
5 lines
1558 bytes
1558 bytes
> w nawiasie jest wyrażenie które zwraca true lub false, 0, 1. Może byś np. > string "" taki lub taki "ala". Czyli równoważne: if ((bool)$x), tak? Wiem co robi if. Chodzi mi o semantykę testu wewnątrz if'a gdy $x nie jest typu bool.
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: artiun
Date: Sun, 21 Jun 2015 17:32
Date: Sun, 21 Jun 2015 17:32
18 lines
2495 bytes
2495 bytes
W dniu 2015-06-21 o 19:06, jivanmukta@poczta.onet.pl pisze:
>> w nawiasie jest wyrażenie które zwraca true lub false, 0, 1. Może byś np.
>> string "" taki lub taki "ala".
>
> Czyli równoważne: if ((bool)$x), tak?
> Wiem co robi if. Chodzi mi o semantykę testu wewnątrz if'a gdy $x nie jest typu bool.
>
podałem: if (""), zresztą 0 i 1 też nie jest bool. Tak naprawdę to kilka
linijek teksu lub czytanie dokumentacji ze zrozumieniem. == znaczy coś
innego niż ===. Bo jeśli zrobię if(""===0) to co, co jeśli if("0"==0) i
dalej co dla if ( "0"===0)?
Warto sprawdzić, bo w tym wypadku zachowania php pamięta się długo.
--
Artur
0 weeks 0 days 9 hours 12 minutes 3 seconds and 478 milliseconds.
"pl.comp.lang.php"
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: platformowe głupki
Date: Sun, 21 Jun 2015 17:38
Date: Sun, 21 Jun 2015 17:38
2 lines
1210 bytes
1210 bytes
z moich testów wynika, że w php coś takiego "abc"=="abc" wcale nie działa... tak?
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: artiun
Date: Sun, 21 Jun 2015 17:44
Date: Sun, 21 Jun 2015 17:44
17 lines
2258 bytes
2258 bytes
W dniu 2015-06-21 o 18:04, jivanmukta@poczta.onet.pl pisze: > W C takie coś znaczyło > if (x != 0) > ale jak jest w PHP5 to nie wiem. > > $x może zawierać wszystko (jakikolwiek typ danych). Pewnie by przyjął dla wszystkich pseudo typów. NULL=0 też by przyjął. Jest jednak pewne ale, dlatego, że nie ma typowania zostały wprowadzone operatory: !== === wymuszające sprawdzanie typów. Wg znaczników ", '', 1.0, 2, typów: class... -- Artur 0 weeks 0 days 9 hours 22 minutes 19 seconds and 423 milliseconds. "pl.comp.lang.php"
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: grzessiek
Date: Sun, 21 Jun 2015 17:59
Date: Sun, 21 Jun 2015 17:59
14 lines
1276 bytes
1276 bytes
W dniu 2015-06-21 o 18:02, jivanmukta@poczta.onet.pl pisze:
> Uczę się PHP5 i mam proste pytanie. Co właściwie znaczy instrukcja:
>
> if ($x) { ... }
to jest dobre pytanie, i nie jest takie proste. tzn. nie jest proste w
kontekście PHP.
generalnie, taka instrukcja powinna sprawdzać, czy $x === true.
ale w rzeczywistości jest tak, że jeżeli $x !== false, to $x = true,
nawet jeżeli $x = 'Ala ma kota';
g.
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: Borys Pogoreło
Date: Sun, 21 Jun 2015 19:01
Date: Sun, 21 Jun 2015 19:01
22 lines
1666 bytes
1666 bytes
Dnia Sun, 21 Jun 2015 19:59:56 +0200, grzessiek napisał(a):
>> Uczę się PHP5 i mam proste pytanie. Co właściwie znaczy instrukcja:
>>
>> if ($x) { ... }
>
> to jest dobre pytanie, i nie jest takie proste. tzn. nie jest proste w
> kontekście PHP.
>
> generalnie, taka instrukcja powinna sprawdzać, czy $x === true.
W sumie to chyba sprawdza (bool) $x === true, ale takie warunki w PHP to
jest jedno wielkie WTF i łatwo sobie w stopę strzelić.
I jeszcze do autora: uważaj na empty(), bo ta funkcja ma bardzo luźne
podejście do sprawdzanej wartości i można się przejechać w niektórych
sytuacjach. Przykładowo jeśli spodziewasz się nie-pustego pola, a ktoś
wprowadzi "0", to nie przepuści.
--
Borys Pogoreło
borys(#)leszno,edu,pl
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: marfi
Date: Sun, 21 Jun 2015 19:26
Date: Sun, 21 Jun 2015 19:26
9 lines
1357 bytes
1357 bytes
Użytkownik <jivanmukta@poczta.onet.pl> napisał w wiadomości news:0e18bd3d-a0d5-491b-b3cb-9262466ffd13@googlegroups.com... ... >ale jak jest w PHP5 to nie wiem. To po co odpowiadzsz - zajmij się ekologiczną chodowlą królików. -- marfi
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Mon, 22 Jun 2015 08:30
Date: Mon, 22 Jun 2015 08:30
18 lines
1947 bytes
1947 bytes
> I jeszcze do autora: uważaj na empty(), bo ta funkcja ma bardzo luźne
> podejście do sprawdzanej wartości i można się przejechać w niektórych
> sytuacjach. Przykładowo jeśli spodziewasz się nie-pustego pola, a ktoś
> wprowadzi "0", to nie przepuści.
Dzięki, zapomniałem o tym. Czyli muszę zmienić kod:
public function isEmptyField($field) {
$val = trim($this->ci->input->post($field));
return empty($val);
}
na kod:
public function isEmptyField($field) {
$val = trim($this->ci->input->post($field));
return $val == '';
}
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: Borys Pogoreło
Date: Mon, 22 Jun 2015 11:07
Date: Mon, 22 Jun 2015 11:07
15 lines
1431 bytes
1431 bytes
Dnia Mon, 22 Jun 2015 01:30:42 -0700 (PDT), jivanmukta@poczta.onet.pl
napisał(a):
> public function isEmptyField($field) {
> $val = trim($this->ci->input->post($field));
> return $val == '';
> }
Używaj od razu właściwych operatorów. Albo (string) $val === '' albo ew.
strlen((string) $val) == 0. Akurat w tym przypadku nie powinno mieć to
wpływu, ale warto tego pilnować.
--
Borys Pogoreło
borys(#)leszno,edu,pl
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Mon, 22 Jun 2015 16:25
Date: Mon, 22 Jun 2015 16:25
5 lines
1768 bytes
1768 bytes
> To po co odpowiadzsz Nie odpowiadam, jestem autorem zapytania. > zajmij się ekologiczną chodowlą królików. Jestem wegetarianinem. Pisze się "hodowla" a nie "chodowla".
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: Rafal Podsiadly
Date: Mon, 22 Jun 2015 16:53
Date: Mon, 22 Jun 2015 16:53
2 lines
1537 bytes
1537 bytes
w sumie if rzutuje zmienną na (bool) więc w zależności jak ta zmienna funkcjonuje to taki warunek zostanie do niej przekazany http://php.net/manual/en/control-structures.if.php
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Thu, 09 Jul 2015 15:25
Date: Thu, 09 Jul 2015 15:25
16 lines
2176 bytes
2176 bytes
W dniu niedziela, 21 czerwca 2015 21:01:45 UTC+2 użytkownik Borys Pogoreło napisał:
> I jeszcze do autora: uważaj na empty(), bo ta funkcja ma bardzo luźne
> podejście do sprawdzanej wartości i można się przejechać w niektórych
> sytuacjach. Przykładowo jeśli spodziewasz się nie-pustego pola, a ktoś
> wprowadzi "0", to nie przepuści.
Napisałem taką funkcję:
// działa dla wyrażeń i is_empty('0') === FALSE:
function is_empty($val) {
if ($val === '0') return FALSE;
return empty($val);
}
i korzystam z niej dla wartości z bazy i pochodzących z formularzy.
Czy to ma sens?
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: artiun
Date: Thu, 09 Jul 2015 18:49
Date: Thu, 09 Jul 2015 18:49
22 lines
2556 bytes
2556 bytes
W dniu 2015-07-09 o 17:25, jivanmukta@poczta.onet.pl pisze:
> W dniu niedziela, 21 czerwca 2015 21:01:45 UTC+2 użytkownik Borys Pogoreło napisał:
>> I jeszcze do autora: uważaj na empty(), bo ta funkcja ma bardzo luźne
>> podejście do sprawdzanej wartości i można się przejechać w niektórych
>> sytuacjach. Przykładowo jeśli spodziewasz się nie-pustego pola, a ktoś
>> wprowadzi "0", to nie przepuści.
>
> Napisałem taką funkcję:
>
> // działa dla wyrażeń i is_empty('0') === FALSE:
> function is_empty($val) {
> if ($val === '0') return FALSE;
> return empty($val);
> }
>
> i korzystam z niej dla wartości z bazy i pochodzących z formularzy.
> Czy to ma sens?
>
Nie. To działa, ale nie ma sensu budować protez.
--
Artur
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: jivanmukta
Date: Thu, 09 Jul 2015 20:13
Date: Thu, 09 Jul 2015 20:13
4 lines
1624 bytes
1624 bytes
W dniu czwartek, 9 lipca 2015 20:53:36 UTC+2 użytkownik artiun napisał: > nie ma sensu budować protez. dlaczego?
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: Borys Pogoreło
Date: Fri, 10 Jul 2015 11:21
Date: Fri, 10 Jul 2015 11:21
18 lines
1482 bytes
1482 bytes
Dnia Thu, 9 Jul 2015 08:25:51 -0700 (PDT), jivanmukta@poczta.onet.pl
napisał(a):
> // działa dla wyrażeń i is_empty('0') === FALSE:
> function is_empty($val) {
> if ($val === '0') return FALSE;
> return empty($val);
> }
>
> i korzystam z niej dla wartości z bazy i pochodzących z formularzy.
> Czy to ma sens?
Nie, to jest typowe "the PHP way". Za chwilę będziesz musiał dodać
is_really_empty() dla kolejnego przypadku.
--
Borys Pogoreło
borys(#)leszno,edu,pl
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: szemrany
Date: Fri, 10 Jul 2015 14:25
Date: Fri, 10 Jul 2015 14:25
13 lines
1394 bytes
1394 bytes
On Sun, 21 Jun 2015 21:26:49 +0200, marfi wrote: >>ale jak jest w PHP5 to nie wiem. > > To po co odpowiadzsz - zajmij się ekologiczną chodowlą królików. Przyganiał kocioł garnkowi - rzec by się chciało. -- howgh szemrany "Trzeba z żywymi naprzód iść, po życie sięgać nowe, a nie w uwiędłych laurów liść z uporem stroić głowę"
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: Rafal Podsiadly
Date: Mon, 27 Jul 2015 06:09
Date: Mon, 27 Jul 2015 06:09
39 lines
3409 bytes
3409 bytes
W dniu piątek, 10 lipca 2015 13:21:12 UTC+2 użytkownik Borys Pogoreło napisał:
> Dnia Thu, 9 Jul 2015 08:25:51 -0700 (PDT), jivanmukta@poczta.onet.pl
> napisał(a):
>
> Nie, to jest typowe "the PHP way". Za chwilę będziesz musiał dodać
> is_really_empty() dla kolejnego przypadku.
>
> --
> Borys Pogoreło
> borys(#)leszno,edu,pl
Na samym początku ktoś ci napisał że jest to ciąg wyrażeń którego wynikiem ma być TRUE lub FALSE
TRUE to liczba != 0
TRUE to ciąg znaków, którego długość jest większa niż > 0
TRUE to tablica która ma więcej niż 0 elementów
TRUE to także NULL
print_r("Test \r\n");
var_dump(array(
'0' => 0,
'(bool)0' => (bool)0,
'empty(0)' => empty(0),
'is_null(0)' => is_null(0),
'null' => null,
'null' => empty(null),
));
Więc w pierwszej kolejności zastanów się jakiego typu dane otrzymujesz i co będziesz obrabiał. Następnie jeśli wynikiem warunku ma być if (x = true) {}
Wtedy pod x = podstawiamy nasz warunek
x = (jakas_zmienna != 0 && empty(jakas_zmienna) && is is_numeric(jakas_zmienna)
Ogólnie budujesz wyrażenie logiczne && łączysz je i tutaj haczyk to wyrażenie jest wykonywane do pierwszego wystąpienia ELSE, więc każde z sprawdzań będzie przetworzone jeśli poprzednie zwróciło true, jeśli jedno z nich zwróciło false to przerywa.
if ( ($x = oblicz_wynik()) && isset($x) && is_numeric($x) && $x > 0 ) to zadanie wykona sie prawidlowo do pierwszego wystąpienia else po prostu musisz wiedzieć co robi program.
Różnica następuje gdy używasz OR "||" tutaj warunek wykonywany jest to pierwszego wystąpienia TRUE więc jeśli na przykład coś liczysz w if a później korzystasz z tego w ciele {} to wielce prawdopodobne że dostaniesz za którymś razem zmienna nie istnieje.
zastanów się co chcesz osiągnąć. Na serio warto trochę się dowiedzieć jak wyglądają wyrażenia logiczne i jak można z nimi eksperymentować.
Re: if ($x) - co to właściwie znaczy? (newbie)
Author: Rafal Podsiadly
Date: Mon, 27 Jul 2015 06:15
Date: Mon, 27 Jul 2015 06:15
35 lines
3368 bytes
3368 bytes
W dniu czwartek, 9 lipca 2015 22:13:46 UTC+2 użytkownik jivan...@poczta.onet.pl napisał:
> W dniu czwartek, 9 lipca 2015 20:53:36 UTC+2 użytkownik artiun napisał:
> > nie ma sensu budować protez.
>
> dlaczego?
Na samym początku ktoś ci napisał że jest to ciąg wyrażeń którego wynikiem ma być TRUE lub FALSE
TRUE to liczba != 0
TRUE to ciąg znaków, którego długość jest większa niż > 0
TRUE to tablica która ma więcej niż 0 elementów
TRUE to także NULL
print_r("Test \r\n");
var_dump(array(
'0' => 0,
'(bool)0' => (bool)0,
'empty(0)' => empty(0),
'is_null(0)' => is_null(0),
'null' => null,
'null' => empty(null),
));
Więc w pierwszej kolejności zastanów się jakiego typu dane otrzymujesz i co będziesz obrabiał. Następnie jeśli wynikiem warunku ma być if (x = true) {}
Wtedy pod x = podstawiamy nasz warunek
x = (jakas_zmienna != 0 && empty(jakas_zmienna) && is is_numeric(jakas_zmienna)
Ogólnie budujesz wyrażenie logiczne && łączysz je i tutaj haczyk to wyrażenie jest wykonywane do pierwszego wystąpienia FALSE, więc każde z sprawdzań będzie przetworzone jeśli poprzednie zwróciło true, jeśli jedno z nich zwróciło FALSE to przerywa.
if ( ($x = oblicz_wynik()) && isset($x) && is_numeric($x) && $x > 0 ) to zadanie wykona sie prawidlowo do pierwszego wystąpienia FALSE po prostu musisz wiedzieć co robi program.
Różnica następuje gdy używasz OR "||" tutaj warunek wykonywany jest to pierwszego wystąpienia TRUE więc jeśli na przykład coś liczysz w if a później korzystasz z tego w ciele {} to wielce prawdopodobne że dostaniesz za którymś razem zmienna nie istnieje.
zastanów się co chcesz osiągnąć. Na serio warto trochę się dowiedzieć jak wyglądają wyrażenia logiczne i jak można z nimi eksperymentować.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads