Pracowałem nad kodem przetwarzania danych podczas natknąłem się na następujące.Weird PHP String Integer Porównanie i konwersja
$line = "100 something is amazingly cool";
$key = 100;
var_dump($line == $key);
Więc większość z nas spodziewa zrzut do wytworzenia false
, ale ku mojemu zdziwieniu wysypisko było true
!
rozumiem, że w PHP istnieje rodzaj konwersji tak:
$x = 5 + "10 is a cool number"; // as documented on PHP manual
var_dump($x); // int(15) as documented.
Ale dlaczego porównanie jak jak wspomniałem w pierwszym przykładzie konwertuje mój ciąg do liczby całkowitej zamiast konwersji integer na string.
rozumiem, że można zrobić ===
ścisłego-porównania na moim przykładzie, ale po prostu chcę wiedzieć:
- Czy istnieje jakakolwiek część dokumentacji PHP, wymieniając na to zachowanie?
- Czy ktoś może wyjaśnić, dlaczego dzieje się w PHP?
- Jak programiści mogą zapobiegać takim problemom?
== robi porównanie numeryczne, które myślę, a kiedy bierzesz i ciągasz i konwertujesz na liczbę, jeśli zaczyna się od liczby, używa tego numeru. Jeśli prawdopodobnie nie zwróci czegoś takiego jak NaN. – rubixibuc
Większość z nas oczekiwałaby tego ....podczas rzucania łańcucha do liczby całkowitej (jak to się dzieje podczas porównywania łańcucha z liczbą), PHP zatrzymuje się na pierwszej nie numerycznej cyfrze, którą napotka, w tym przypadku na przestrzeni między 100 (wszystkie cyfry) i "coś". SO 100 jest wypadkową wartością. –
Zobacz http://strefa.com.pl/a/8672423 – Gumbo