Pull to refresh
4
0
spadar @spadar

User

Send message
Метапрограммирование - самое настоящее зло. ИМХО очень падает понимание кода.
И, между прочим, в книге Дж.Шлосснейгла написано, что Zend Engine при каждом обращении к такому метакоду заново его "компилирует".
А теперь представьте, что метакод является ядром системы. При больших нагрузках она будет долго и упорно отдавать ответ
Эта статья не о паттернах, а о недокументированных возможностях ПХП.
Кстати, а что вы имели ввиду под примерами?
Да, вы правы. Причем на разработчики PHP не считают это багом. А костыльный вариант, с помощью которого это работает корректно пишется с использованием debug_backtrace();
В моих примерах конструкторы надежно защищены многоточиями;)
Да, спасибо, Вы правы unserialize не выкидывает исключение. Счас исправлю в статье. Может быть этот пример лучше пояснит, как оно отработает:


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";
исследование тянет таки на докторскую степень по ПХП
2

Information

Rating
Does not participate
Location
Минская обл., Беларусь
Date of birth
Registered
Activity