( Я понимаю, что это может быть обидным решением, но я был бы признателен, чтобы мы избегали ответов типа "Пожалуйста, не надо". )
У меня есть класс, конструктор которого принимает обратный вызов в качестве аргумента. В этом обратном вызове я думаю, что было бы наиболее семантически правильным, чтобы переменная $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
} ...
Но это требует дополнительного требования, которое мне не нужно.