Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[php] Nielogiczne instrukcje.
Z przykrością trzeba przyznać, iż zdarzają się “miejsca” w których język PHP nie jest ani logiczny, ani konsekwentny w swoich założeniach. Oto moja lista “zażaleń”.
Konsekwentność jest zaburzona przez:
- nazwy funkcji obsługi napisów (na przykład str_replace, strpos)
- kolejność argumentów w funkcjach (na przykład strpos i explode)
Jakiś czas temu rozgorzała dyskusja na ten temat… niestety na rozmowach się skończyło.
Do tego należałoby dorzucić kwestie, które w moim odczuciu można potraktować jako błędy logiczne.
Jako pierwszy z nich wymienię następujący przykład:
Po wykonaniu tych instrukcji spodziewam się wyniku ‘1′ (bo przecież zmienna jest zainicjowana). Niestety funkcja isset zwróci wartość false (o czym można zresztą przeczytać w manualu języka PHP) - dzieje się tak zapewne dlatego, że niezainicjowane zmienne (np w obiekcie) mają właśnie wartość null.
Druga sytuacja, która może nas zaskoczyć ujawnia się w następującym przypadku:
Wydawałoby się, że zostanie wyświetlona liczba ‘0′ (bo przecież ‘cos’ != 0), niestety tak nie nastąpi, a to dlatego że wartości po ‘case’ zostaną skonwertowane do liczb całkowitych. Z racji, że (int) ‘cos’ wynosi 0 zostanie wyświetlona liczba ‘1′. Podobna sytuacja wystąpi w przypadku instrukcji ‘if’:
-
if(0 == ‘cos’) {
-
echo ‘to nie logiczne’;
-
}
Chociaż w tym przypadku możemy skorzystać z porównania ‘===’, a nie ‘==’ i opisywany “problem” nie wystąpi. W przypadku instrukcji ’switch/case’ będziemy musieli zapewnić, aby porównywane wartości były tego samego typu (wszystko będzie w porządku gdy zmienna $x będzie miała wartość “0″, a nie 0).
Podsumowując: o ile “błędów” logicznych łatwo unikać (chociaż ich poznanie w praktyce może zająć nam kilka godzin) o tyle nigdy nie pamiętam jaka jest kolejność argumentów w niektórych funkcjach (całe szczęście korzystam z Eclipse PDT, który mnie ratuję w tej sytuacji ;)).
1 Komentarz to “[php] Nielogiczne instrukcje.”
Napisz komentarz
Kolejna pułapka:
$arr = array(’A', ‘B’, ‘C’);
foreach ($arr as &$val) {}
foreach ($arr as $val) {}
var_dump($arr);
Wynik: A, B, B