#php #php-5.3
#php #php-5.3
Вопрос:
я играю с анонимными функциями PHP 5.3 и пытаюсь эмулировать объекты на основе прототипов, такие как javascript:
$obj = PrototypeObject::create();
$obj->word = "World";
$obj->prototype(array(
'say' => function ($ins) {
echo "Hello {$ins->word}n";
}
));
$obj->say();
Это вводит «Hello World», первый параметр — это экземпляр класса (например, python), но я хочу использовать переменную this, когда я вызываю функцию, я делаю:
$params = array_merge(array($this),$params);
call_user_func_array($this->_members[$order], $params);
И попробуйте это, без результатов:
call_user_func_array($this->_members[$order] use ($this), $params);
Тоже попробуйте, в методе __set:
$this->_members[$var] use ($this) = $val;
И
$this->_members[$var] = $val use ($this);
Есть идеи?
Ответ №1:
Родительская область видимости наследуется use
при создании анонимной функции. Итак, то, что вы пытаетесь сделать, невозможно.
$d = 'bar';
$a = function($b, $c) use ($d)
{
echo $d; // same $d as in the parent's scope
}
Возможно, вам нужно что-то более похожее на это:
$obj->prototype(array(
'say' => function () use ($obj) {
echo "Hello {$obj->word}n";
}
));
Но анонимная функция не будет частью класса, и поэтому, даже если вы передадите « $this
» в качестве параметра через $obj
, она не сможет получить доступ к личным данным объекта.