Метапрограммирование - самое настоящее зло. ИМХО очень падает понимание кода.
И, между прочим, в книге Дж.Шлосснейгла написано, что Zend Engine при каждом обращении к такому метакоду заново его "компилирует".
А теперь представьте, что метакод является ядром системы. При больших нагрузках она будет долго и упорно отдавать ответ
Да, вы правы. Причем на разработчики PHP не считают это багом. А костыльный вариант, с помощью которого это работает корректно пишется с использованием debug_backtrace();
И, между прочим, в книге Дж.Шлосснейгла написано, что Zend Engine при каждом обращении к такому метакоду заново его "компилирует".
А теперь представьте, что метакод является ядром системы. При больших нагрузках она будет долго и упорно отдавать ответ
Кстати, а что вы имели ввиду под примерами?
class Spadar_Core_Object
{
protected $sIndex = 'Object';
public function parseObject($sInfo)
{
$mInfo = $sInfo;
$mInfo = @unserialize($sInfo);
if ($mInfo instanceof self)
{
return $mInfo;
}
return $this;
}
public function __toString()
{
return $this->sIndex;
}
public function setIndex($sIndex)
{
$this->sIndex = $sIndex;
}
}
$oObject = new Spadar_Core_Object();
$oObject->setIndex('Second');
$sSerializedObject = serialize($oObject); // Создаем сериализованную строку
$oSecondObject = new Spadar_Core_Object();
// Возвращается восстановленный объект из териалтзованной строки
echo 'Check: '.$oSecondObject->parseObject($sSerializedObject)."
\r\n";
echo 'Check Something Else: '.$oSecondObject->parseObject('Something Else')."
\r\n";