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