Короче, часто в объектах приходится использовать тяжёлые методы. Ежу понятно, что напрашивается решение, типа:
code php
private $object = NULL;
function object()
{
$this->object = object_load('object_class', $this->object_id());
return $this->object;
}
Всё хорошо, но задалбывает же писать одно и то же. А в редакторе настоящего программиста должна отсутствовать функция копирования блоков кода (с) Чарльз Мур.
Ну и разродился таким, вот, решением с пару недель назад:
code php
function object() { return $this->load_attr('object', object_load(...)); }
где load_attr() - функция, которая сохраняет полученное значение во хэш атрибутов объекта, если там оно ещё не сохранено. Иначе - возвращает старое значение.
...
Опаньки, а в PHP-то вычисления неленивые... Форт, блин, на годы расслабляет
Вчера отловил случайно, аж в 25 мест использование такого способа расползлось
Пришлось сделать некрасиво в стиле:
code php
function object() { return $this->__havec('object') ? $this->__lastc() : $this->__setc(object_load(...)); }
Не хватает, однако, синтаксических макросов в языке или оперирования процессом трансляции...
(хотя, конечно, я пример несколько упростил, именно такие задачи у меня решаются проще):
code php
function auto_objects()
{
'object' => 'object_class(object_id)',
...
);
}
...
Интересно, кто-то ещё на грабли допущения ленивости в языках, где её нет наступал, или это только меня так перекособочило?