За последние 24 часа нас посетили 229700 программистов и 1731 робот. Сейчас ищут 2322 программиста ...

phpDoc и динамические аргументы

Тема в разделе "Прочие вопросы по PHP", создана пользователем TheShock, 17 сен 2009.

  1. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    ситуация: зависимо, например, от типа первого аргумента метод меняет поведение

    например:

    PHP:
    1. <?
    2. public function method ($arg1, $arg2, $arg3 = null) {
    3.     if (is_callable($arg1)) {
    4.         $callback = $arg1;
    5.         $arguments = $arg2;
    6.     } else {
    7.         $value = $arg1;
    8.         $param = $arg2;
    9.         $flags = $arg3;
    10.     }
    11. }

    в Джаве для этго есть отличный способ, что-то типа такого:
    PHP:
    1. <?
    2. public function method (Closure $callback, Array $arguments) { }
    3. public function method (String $value, Array $params, Int $flags) { }
    и оно само определит, какой метод вызвать. в пыхе, понятно, такого нету.

    еще бывает что-то типа такого часто:
    PHP:
    1. <?
    2. public function method ($valueORkey, $possValue = null) {
    3.     $key = is_null($possValue) ? null : $valueORKey;
    4.     $val = is_null($possValue) ? $valueORKey : $possValue;
    5. }
    Для примера — та же встроенная функция implode.

    Понятное дело, что средствами языка подобное не реализовать, или будет не очень красиво, но меня интересует больше другое — интерфейсы, а не реализация. Хотя бы, чтобы было IDE воспринимали и отображали корректно например:

    Код (Text):
    1. meth[ctrl-space] =>
    2. (всплывающая подсказка)
    3. method (Closure $callback, Array $arguments) { }
    4. method (String $value, Array $params, Int $flags) { }
    [​IMG]
     
  2. sorteros

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

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    Не совсем понятно, в чём суть вопроса. Перегрузки методов в пхп нет и это порой дико напрягает, но что есть то есть.
     
  3. kostyl

    kostyl Guest

    TheShock
    ты хочешь, чтобы стандартные типы отображало? По моему net beans отображает интерфейсы
     
  4. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    я хочу сделать что-то типа такого:

    PHP:
    1. <?
    2. public function method (Closure $callback, Array $arguments) { }
    3. public function method (String $value, Array $params, Int $flags) { }
    И я знаю, что в пхп этого нету, потому мне, хотя бы, описать так в пхпДок, а сделать как показано в первом посте первого примера
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    и хорошо что нет
     
  6. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T., аргументируй
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    TheShock
    ты знаешь что я напишу...
     
  8. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T., понятия не имею, честное слово. по-моему такая возможность была бы замечательной.
     
  9. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    не знаю, то ли что тебе надо
    [​IMG]
     
  10. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    вот еще
    file3.php
    [​IMG]
     
  11. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Такая возможность была бы замечательной для чего, для IDE? :)

    У джавы такая возможность есть потому что нету динамических типов. И перегрузка методов - фактически костыль.
     
  12. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    lexa, читай первое сообщение.
    на счёт примера — мысль, конечно, интересная. но не совсем то...
     
  13. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    TheShock
    а чем не то? во-втором случае как раз показываются два метода с одинаковым именем, но разными типами аргументов.
     
  14. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    iliavlad, допустим, я делаю библиотеку, которую собираюсь выложить оупенсорс.
    у меня в ней есть класс A и в нём нужно сделать два метода с разными параметрами.
    понимаешь?
     
  15. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    назови methodClosure и methodValue и по method(ctrl+break) будут оба они выходить