За последние 24 часа нас посетили 17008 программистов и 1341 робот. Сейчас ищут 1599 программистов ...

PHPDoc. Вопрос о динамическом имени класса

Тема в разделе "PHP для новичков", создана пользователем titch, 6 июн 2013.

  1. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Привет на сто лет!

    Суть вопроса:
    Код (PHP):
    1. <?php
    2. abstract class Singleton {
    3.     static private $instance = null;
    4.     /**
    5.     * @return Singleton;
    6.     */
    7.     public static function getInstance() {
    8.         // Здесь очень сложная механика по передаче самого себя с подстановкой самотипа
    9.     }
    10. }
    11.  
    12. class Test extends Singleton {
    13.     public $varWithExtraName;
    14. }
    15.  
    16. $t = Test::getInstance();
    17. $t-> .... //барабанная дробь! IDE должна сейчас подкинуть вам спеллы! Но!..
    18.  
    19. ?>
    Но спеллы логичным образом подкидываются из родительского класса. Вилы. Дальше приходится работать в слепую.

    Вопроса два:
    1. Как можно не очень криво закостылить? Так, чтобы не пришлось копировать целый метод.
    2. Как сделать динамическую подстановку имени класса? Ладно-ладно. Не нужно супер динамики. Я готов в описании класса написать что-то вроде @id Test, а в описании метода @return {@id}, но ведь, зараза, и таким образом не работает!

    ЗЫ: Кто может объяснить, куда скипанула нормальная подсветка синтаксиса? Давно не заходил. Столько всего поменялось - любо дорого поскорбеть.
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    она теперь так:
    Код (PHP):
    1.  
     
  3. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    За подсветку спасибо!)
    Нашел хот-фикс. В динамике не работает, но с большего полезен. Суть в следующем:

    Оставляем все то же самое, но дальше пишем вот такую штуку:
    Код (PHP):
    1. <?php
    2. $t = Test::getInstance(); /* @var $t Test */
    3. $t->... //Здесь долгожданные спеллы нужного нам класса
    4. ?>
    Почитал умные форумы. Пишут, что из-за мета уровня DocBlock'ов динамическая подстановка не работает. Если честно, то я не уверен, что же именно в этом динамического. Класс в котором объявлен метод (или в который он унаследован) известен еще до начала исполнения кода, т.е. при первом проходе. У класса нельзя изменить родителя во время исполнения. Какая же это динамика?..

    Если появится механика лучше хотфикса - буду премного благодарен! Пока довольствуюсь костылем.

    Добавлено спустя 11 минут 53 секунды:
    Вроде в NetBeans'е пофиксили аж в январе месяце. Посмотрю сейчас ночные сборки, может быть поможет.

    https://netbeans.org/bugzilla/show_bug.cgi?id=196565

    Всем спасибо.