parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Наоборот вызовется повторно...

nkostya 10.01.2010 13:18

Есть класс Model.
@CLASS
Model

@auto[]
$_model_cache[^hash::create[]]

@load[id]
^if(!$_model_cache.$id){
	$_model[^sql:table{...}]
	$self._model_cache.$id[$_model]
}

$self._data[$_model]
Также есть 2 класса-потомка ModelA & ModelB:
@CLASS
ModelA

@USE
Model.p

@BASE
Model

@load[id]
^BASE:load[$id]

$self._data.class_a(true)
@CLASS
ModelB

@USE
Model.p

@BASE
Model

@load[id]
^BASE:load[$id]
$self._data.class_b(true)
При таком раскладе получается, что метод @auto класса Model вызовется 3 раза: 1 при подключении Model, 2 при подключении ModelA и 3-ий раз при подключении ModelB. Соответственно хеш _model_cache будет обнулен. Т.е. метод вызывается лишние несколько раз, чего от метода auto никак не ожидалось. Если бы область видимости при вызове @auto базового класса была областью видимости текущего класса (что тоже не логично) то еще как-то можно было понять...

Получается, что необходимо в дочерних методах перекрывать метод auto на пустой?

Мне кажется что предыдущий алгоритм работы метода auto был более удобным. Т.к. метод auto гарантированно вызывался 1 раз.