background

PHP, a porównywanie łańcuchów

PHP z racji bycia dynamicznie typowanym językiem programowania zachęca  do tworzenia kodu na pograniczu poprawności działania. Każdy uczący się języka programowania słyszał na pewno o zjawisku boxing oraz unboxing, które w skrócie oznacza auto-magiczne rzutowanie wartości na najbardziej pasujący typ. Takie zachowanie występuje, nawet w językach statycznie typowanych jak Java czy C#(np. int<=>Integer). W PHP może przybrać ono następującą postać:

echo 123 == "123a123";

Wyrażenie to da wartość True, mimo znaczącej różnicy. Wykorzystanie znacznika równoważności === rozwiązuje ten problem , jednakże porównanie:

echo 1 === "1";

Da wartość False. Porównywanie łańcuchów znakowych nie jest wyższą szkołą jazdy, wystarczy użyć jednej z bezpiecznych binarnie i obliczalnych funkcji strcmp lub strcasecmp.