Итак есть класс: Код (Text): class AddressMnager { //создаем свойство объекта в виде массива. public $adress = array("93.100.97.9","213.113.254.22"); //создаем функцию, в которой проходим циклом function outputAddresses ($resolve) { foreach ($this->adress as $adress) { print $adress; //И если переданный аргумент функции вернул true то: if ($resolve) { print "<br>".gethostbyaddr($adress)."<br>"; } print "\n"; } } } $manager = new AddressMnager(); $a = false; $manager->outputAddresses($a); И так проблема! В 1 случае: $a = false; - это булевый тип. Все ок, метод в классе не работает. В 2 случае: $a = "false" - отлично это строка, функция видит данные работает. А теперь, почему у меня не получается? (хотя проверки говорят что все ок, это в классе чета там перешинкуется?). Делаю: $manager = new AddressMnager(); $a = (string)false; $manager->outputAddresses($a); ====== НЕ РАБОТАЕТ! Делаю: $manager = new AddressMnager(); $a = false; $manager->outputAddresses((string)$a); ====== НЕ РАБОТАЕТ! Что делать? просто изучаю ООП, и не понимаю почему данные когда уже в методе находятся берутся без изменений типа (string) (bool)
Как определили, что не работает? Повторил ваш бредовый эксперимент, всё работает, хост не выводится. только (string) false - это пустая строка, это не "false". А (bool)"false" - это true. Бредовый, потому что зачем намеренно передавать строки в аргумент, в котором должно быть по логике true или false?
(string) false - это пустая строка, это не "false". А (bool)"false" - это true. В этом и была моя проблема видимо, где можно про это подробнее прочитать? Ато нигде где сказанно о преобразованиях не видел такого..
https://php.ru/manual/language.types.type-juggling.html https://php.ru/manual/language.types.boolean.html#language.types.boolean.casting https://php.ru/manual/language.types.string.html#language.types.string.casting
== бесполезен Он не транзитивен. "foo" == TRUE, и "foo" == 0… но, конечно же TRUE != 0. == конвертирует в число, если возможно. Далее конвертирует в float'ы, если возможно. Получается, что большие шестнадцатиричные строки(например, хеши паролей) могут неожиданно быть равными, когда они не равны. По тем же причинам, "6" == " 6", "4.2" == "4.20" и "133" == "0133". Но прошу заметьте, что 133 != 0133, потому что 0133 восьмеричное. === сравнивает значения и тип… но не для объектов, где === истинно если оба операнда один и тот же объект! Для объектов, == сравнивает оба значения(для каждого аттрибута) и типы, что === делает для всех остальных типов. Вот тут много написано: https://habrahabr.ru/post/142140/ Вот тут тоже много написано про Приведение типов в PHP: https://habrahabr.ru/post/259497/