За последние 24 часа нас посетили 39368 программистов и 1722 робота. Сейчас ищет 651 программист ...

Типизированные аргументы

Тема в разделе "Прочие вопросы по PHP", создана пользователем alexey_baranov, 10 дек 2010.

  1. alexey_baranov

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

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    Привет!

    А разьве нельзя передать NULL в качестве типизированного аргумента?
    Вот пример, который у меня не работает на 5.3
    PHP:
    1. <?php
    2. class View{
    3.         /**
    4.          * начначить родительскую вьюшку
    5.          *
    6.          * @param View $parent
    7.          * @return View
    8.          */
    9.         function setParent(View $parent) {
    10.             $this->_parent = $parent;
    11.             return $this;
    12.         }
    13. }
    14. $view->setParent(null) // тут ошибка Catchable fatal error: Argument 1 passed to Core\View\View::setParent() must be an instance of Core\View\View, null given,
     
  2. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    т.к. язык пхп изначально НЕтипизированный, то конструкция function setParent(View $parent) не является родной, скорее это хак для исключений или что-то типа этого.
    Более правильным был бы подход

    function setParent($parent = null){

    if($parent == null) ...

    if(is_subclass_of($parent, 'View')) ...

    if(is_object($parent))...

    }

    и т.д... проверок может быть много
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Gromo
    Код (Text):
    1. if($parent == null)
    =>
    Код (Text):
    1.  if(is_null($parent))
    Код (Text):
    1. if(is_subclass_of($parent, 'View')
    Почему не instanceof?
     
  4. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    function setParent(View $parent = null)
     
  5. shurastik

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

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    нельзя, меня тоже бесит

    если только так извернуться:

    PHP:
    1. <?php
    2. class View{
    3.         /**
    4.          * начначить родительскую вьюшку
    5.          *
    6.          * @param View $parent
    7.          * @return View
    8.          */
    9.         function setParent(View $parent = null) {
    10.             $this->_parent = $parent;
    11.             return $this;
    12.         }
    13. }
    14. $view->setParent();
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Это обсуждалось в internals листе и патч вроде комитнули в trunk, так что со следующей веткой будет.
     
  7. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    выдернул первые попавшиеся проверки, связанные с классами и объектами.
    там приписка, что проверок может быть очень много, и совершенно разных.
     
  8. alexey_baranov

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

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    спасибо за инфу