Można porównać dwa ciągi.
"00001" === "1" // false
Pamiętaj ==
oznacza równowartość ===
oznacza równe
My tylko domyślać, dlaczego tak jest dlatego, że w początku PHP starał się być językiem typu mniej zanim poszli trasę staje się luźno napisany język.
PHP był pierwotnie procesorem, który pozwalał na trochę skryptów wewnątrz niego. Ponieważ wszystkie dane wejściowe w Internecie mają charakter tekstowy, musiały ciężko pracować, biorąc pod uwagę dane tekstowe, aby zachowywać się zdrowo, gdy chodziło o radzenie sobie z liczbami.
Mogę się mylić, ale nie sądzę, że możliwość jawnego przesyłania typów danych pojawiła się na scenie aż do PHP 4 z wprowadzeniem funkcji * val (np. Intval) itd. I myślę, że notacja odlewnicza, podobnie jak (int)
pojawił się po tym.
Dla operacji nieporównywania było to dość proste, ponieważ wszystkie one mają typ skojarzony z nimi (+ -/* wszystkie traktują o liczbach, podczas gdy zajmuje się ciągami), więc jasna ścieżka do tego, jak rzeczy powinny być rzucane w tych przypadkach jest oczywiste.
Jednak przy sprawdzaniu równości lub równoważności między zmiennymi jedynym sposobem na to było traktowanie wszystkiego, co wyglądało jak liczba jako liczba, ponieważ w tym czasie jedynym sposobem, w jaki mogłoby to zostać uzyskane, byłoby zewnętrznie. ciąg i nie było sposobu, aby zrobić inaczej.
Ponieważ nie pobierali podpowiedzi od Perla. : P O wiele łatwiej byłoby powiedzieć: "' == "porównuje numerycznie,' eq' porównuje leksykalnie, a '===' porównuje ściśle ". (Choć gdybyśmy mieli pierwsze dwa, ten drugi może nigdy nie być potrzebny.) Eh, może z obiektami.) – cHao