За последние 24 часа нас посетили 20908 программистов и 1628 роботов. Сейчас ищут 856 программистов ...

Сломал всю голову по преобразование типов для передачи в класс.

Тема в разделе "PHP для новичков", создана пользователем kams, 13 апр 2016.

  1. kams

    kams Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    25
    Симпатии:
    0
    Итак есть класс:
    Код (Text):
    1.  
    2. class AddressMnager {
    3.    //создаем свойство объекта в виде массива.
    4.    public $adress = array("93.100.97.9","213.113.254.22");
    5.    //создаем функцию, в которой проходим циклом
    6.    function outputAddresses ($resolve) {
    7.      foreach ($this->adress as $adress) {
    8.        print $adress;
    9.        //И если переданный аргумент функции вернул true то:
    10.        if ($resolve) {
    11.          print "<br>".gethostbyaddr($adress)."<br>";
    12.        }
    13.        print "\n";
    14.      }  
    15.    }
    16. }
    17. $manager = new AddressMnager();
    18. $a = false;
    19. $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)
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Как определили, что не работает? Повторил ваш бредовый эксперимент, всё работает, хост не выводится. только (string) false - это пустая строка, это не "false". А (bool)"false" - это true. Бредовый, потому что зачем намеренно передавать строки в аргумент, в котором должно быть по логике true или false?
     
  3. kams

    kams Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    25
    Симпатии:
    0
    (string) false - это пустая строка, это не "false". А (bool)"false" - это true.

    В этом и была моя проблема видимо, где можно про это подробнее прочитать?
    Ато нигде где сказанно о преобразованиях не видел такого..
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    php7:
    PHP:
    1. function outputAddresses (bool $resolve) {
    2. //...
    З.Ы: код действительно бредоватый.
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    В документации к языку PHP пробовали?
    https://php.ru/manual/language.types.type-juggling.html
     
  6. Administrator

    Administrator Старожил
    Администрация Модератор

    С нами с:
    1 янв 1970
    Сообщения:
    10.113
    Симпатии:
    7
    • == бесполезен
      • Он не транзитивен. "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/
     
    #7 Administrator, 13 апр 2016
    Последнее редактирование: 13 апр 2016
    artoodetoo нравится это.