все мои сайты имеют общий стартер, который имеет дело с URL-адресами, расположением файлов и т. Д. Необходимо обработать 3 случая: каталог, файл существует, а файл не существует. Каждое приложение имеет уникальный код для каждого случая. Я решил немного повозиться с рункитом и пытаюсь унифицировать код. Каждый случай будет обрабатываться функцией, которую можно переопределить с помощью runkit.
Рассмотрим этот код:
class start {
function __construct() {
$this->options = array();
}
public function process() {
// some code here
$this->file_not_exists();
}
public function file_not_exists() {
$this->options['page'] = 222;
}
public function redefine($what, $code) {
runkit_method_redefine(get_class($this), $what, '', $code, RUNKIT_ACC_PUBLIC);
}
}
$start = new start();
$start->redefine('file_not_exists', '$this->options["page"] = 333;')
// page is now 333
Эта часть работает как задумано. Но когда я пытаюсь изменить код так, чтобы переопределенный метод вызывал пользовательскую функцию, он работал. Но, ради бога, я не могу понять, как передать $ this в функцию.
Переопределение метода выглядит так:
public function redefine($what, $code) {
runkit_method_redefine(get_class($this), $what, '', 'call_user_func('.$code.'(), '.$this.');', RUNKIT_ACC_PUBLIC)
}
Это не работает, что бы я ни пытался (также call_user_func_array). Я просто не могу понять это. Для записи:
public function redefine($what, $code) {
my_user_function($this);
}
Работает.
Любая помощь приветствуется.
Обратите внимание, что это всего лишь эксперимент, и я хотел бы знать, как это сделать:)
Edit:
Я получаю:
Catchable fatal error: Object of class starter could not be converted to string in blablallala\rewrite_starter2.php on line 153