Переназначение $this в PHP
( Я понимаю, что это может быть щекотливым решением, но я был бы признателен, если бы мы избегали таких ответов, как "Пожалуйста, не надо.")
У меня есть класс, конструктор которого принимает обратный вызов в качестве аргумента. В этом обратном вызове, я думаю, было бы наиболее семантически правильно, чтобы переменная $this
была доступна в качестве ссылки на экземпляр, которому принадлежит обратный вызов. ( Я заметил, что 5.4 восстановил $this
в контексте анонимных функций , определенных в классе, однако даже это изменение здесь не помогло бы, так как функция передается в качестве аргумента конструктору, как уже упоминалось)
Проблема возникает из-за того, что экземпляр не передается в качестве аргумента для обратного вызова, а вместо этого становится доступным use()
use()
имеет тенденцию плакать по поводу $this
, заявляя, что его нельзя использовать в качестве лексической переменной.
Есть ли способ, не передавая его в качестве аргумента ( любой подход, use()
или нет, скорее всего, подойдет ), чтобы добиться этого?
С другой стороны, единственное, что я могу придумать, это что-то вроде:
... function($foo, $bar)
use($array_with_this){
extract($array_with_this); // contains instance with key 'this'
// code using $this
} ...
Но это вынуждает к дополнительным требованиям, в которых я бы предпочел не нуждаться.
1 answers
$that = $this;
cb(function () use ($that) {
$that-> ...
});
Это $this
специальное ключевое слово, вы не можете использовать его вне контекста объекта. И анонимные функции в настоящее время выполняются вне контекста объекта. По-видимому, это изменится в следующей версии PHP (5.4).