Процедурный подход в PHP и ОО. Налицо несовместимость синтаксиса.

fixxxer

К.О.
Партнер клуба
да... workaround, ибо нельзя писать (new Foo)->bar()
PHP:
return new static
просто мне так нравится =) не люблю плодить временные переменные без необходимости и люблю return $this :)

точно так же обхожу отсутствие перегрузки конструкторов:

User::construct()
User::constructById($id)
User::constructByName($name)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а User::constructById($id) дергает модель, которая из базы вытягивает данные, или как?

-~{}~ 18.02.10 02:47:

в смысле, если это конструктор, как ты его связываешь с базой?
 

fixxxer

К.О.
Партнер клуба
$self = new static;
return $self->loadById($id) ? $self : NULL; // exception по вкусу

то есть, просто shortcut для

$User = new User;
$User->loadById($id);
 

zerkms

TDD infected
Команда форума
народ, а ткните носом в доку про new static
впервые вижу такую жесть %)

UPD: а, оно под 5.3
 

fixxxer

К.О.
Партнер клуба
Ага. Пожалуй единственный случай когда LSB оправдан %)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
получается, у предка User есть связь с базой, которую может взять какой-либо из конструкторов User
занимательная мысль
 

fixxxer

К.О.
Партнер клуба
У меня два подхода =)

Есть SimpleModel, который сразу и про базу знает, и рендериться умеет, и все такое, и юзается напрямую из контроллера как ты сказал. Это на простых сайтах использую.

Для более навороченных вещей - класс сущности (скажем User) делегирует свои вызовы модели (или моделям; например, могут использоваться mysql и sphinx) - с пред/постобработкой, когда надо. Экземпляры моделей сам и создает (getModel() с lazy load обычно).
 

C_TIGER

Новичок
fixxxer
какой ужас =)
такое ощущение что вы пытаетесь яву их пыха делать
 

fixxxer

К.О.
Партнер клуба
А что, нормальный объектный дизайн можно делать только на Java?

В PHP для этого есть все средства.
 
Сверху