Сообщение от
crlf
↑
Затянуло меня это задание, второй день копаюсь
Но скила не хватает, правильно ли я понимаю, что главная фишка в поведении ArrayAccess?
не то слово, я пару дней спать нормально не могу.. забрался далеко, но не достаточно(
всё верно, фишка в ArrayAccess, маппер, который в конструкторе класса User
Код:
public function __construct() {
parent::__construct($this, array(
'id' => array('type' => 'function', 'target' => 'id'),
'name' => array('type' => 'function', 'target' => 'name')
));
}
определяет какая функцию этого класса будет вызвана, причем передавать параметры в вызов мы не можем, ибо вызов у нас один в файле demo.php
Код:
$name = $user->name; // Getting the current user name
маппер передаётся сериализованным от клиента, другими словами мы можем подделать вызов функции на нужную переопределив вызываемый класс, он хранится в GenericMapper( который отнаследован от ArrayAccess ) $this->realObject
чего я смог добиться... отправляю класс User и класс Debug
в дебаг классе переопределяю переменную debugStateName с _DEBUG на flag, затем вызываю через модифицированный маппер функцию debugStateName( которая в debug классе )
Код:
public function getDebugState() {
return $GLOBALS[$this->debugStateName];
}
в итоге мы получаем в $name флаг
Код:
$name = $user->name; // Getting the current user name
но подвох в том что $name нигде не выводится
конечно мы можем вызвать showNice или show из дебаг класса, но вызов то подменить мы можем только один..
в общем я пока сам в тупике, могу скинуть рабочую версию скрипта, если нужно, который прокидывает в $name флаг