Указывание класса объекта при присваивании

Вурдалак

Продвинутый новичок
Кто-то постил фишку типа
PHP:
/** @var User */
$user = $userTable->find(1);
В NetBeans не работает. Я не так оформил комментарий или NB не поддерживает это?
 

Вурдалак

Продвинутый новичок
Вот дерьмо, код-то работает, но только он не может перекрыть @return, т.е. в коде
PHP:
/* @var $userTable UserTable */
$userTable = Doctrine::getTable('User');
$userTable определяется как Doctrine_Table. Если намеренно исправить getTable() на несуществующий метод, то тип $userTable определяется местным комментарием. Б###ь, оно только для этого и нужно, кто это только писал, б###ь.
 

HraKK

Мудак
Команда форума
А на хрена такое? ППЦ!
Если надо
PHP:
*@return User_Interface
*/
public function find(1)
И во всех местах автоматом будет работать
 

Вурдалак

Продвинутый новичок
HraKK, вот конкретный пример выше был с Doctrine::getTable($name). Что ты с этой фабрикой будешь делать?
 

Вурдалак

Продвинутый новичок
weregod, а дай конкретную ссылку на описание формата вида
PHP:
/* @var $varName varType */
на сайте http://phpdoc.org/ и я тебе заплачу 20 WMZ.
 

Вурдалак

Продвинутый новичок
DYPA, внимательно посмотри что я написал и сравни с тем, что по твоей ссылке. Найди 10 отличий.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Объекты через new?! Да как можно! Это же НЕТЕСТИРУЕМАЯ ПРОЦЕДУРЩИНА! Предательство всего движения ООП-ТДД-МВЦ! Только через фабрику и только за 2мя фасадами с реестром!
 

weregod

unserializer
weregod, а дай конкретную ссылку на описание формата вида
PHP:
/* @var $varName varType */
проморгал приведённый кривой формат
не использую NetBeans, но предполагаю, что
PHP:
/** @var varType */
(две звезды в открывашке комментария) сработает
NuShpere phpEd по крайней мере так себя ведет, с одной звездой автоподстановка не работала никогда
 

Вурдалак

Продвинутый новичок
grigori, там же в конструктор требуется передавать Doctrine_Connection и ещё что-то. Это просто неудобно.
 

AmdY

Пью пиво
Команда форума
IDE как бы намекает, что ты делаешь что-то не так. Не пользуйся подобной магией, работай непосредственно с нужной моделью. К сожалению, в доктрине перестарались со вседозволенностью в угоду обратной совместимости. Сразу не было нормальной генерации тэйблов, её докрутили позже.
 

Вурдалак

Продвинутый новичок
AmdY, дай ссылку на документацию по Doctrine, где указан другой способ создания объекта типа Doctrine_Table.

Я пока вижу это:
PHP:
class UserTable extends Doctrine_Table
{
    public function getCreatedToday()
    {
        $today = date('Y-m-d h:i:s', strtotime(date('Y-m-d')));
        return $this->createQuery('u')
            ->where('u.created_at > ?', $today)
            ->execute();
    }
}

$usersCreatedToday = Doctrine_Core::getTable('User')->getCreatedToday();
 

itprog

Cruftsman
weregod
это не кривой формат. это просто не phpdoc. В phpdoc это выглядело бы как
PHP:
/**
 * @var varType
 */
AmdY
В этом нет ничего плохого. Простые примеры - обход массива объектов, передача объекта в php шаблон и т.п.
Всё, что хотелось бы в PHP - это поддержку указания класса
PHP:
$user = (User)$userTable->find(1);
 

AmdY

Пью пиво
Команда форума
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/yaml-schema-files/en

параметр generateTableClasses указывает, что нужно создавать классы для таблиц и работать нужно с ними. В мане, конечно, зоопарк творится. лучше так не делать, чтобы не было проблем с отладкой и поддержкой, не нужно никакого phpdoc.

itprog
спасибо, не знал, что можно указывать так тип и для классов.

p.s. можно писать date('Y-m-d 00:00:00')
 
Сверху