Funkcje anonimowe nie używają zakresu leksykalnego, ale $this
is a special case and will automatically be available inside the function as of 5.4.0. Twój kod powinien działać zgodnie z oczekiwaniami, ale nie będzie przenośny dla starszych wersji PHP.
Następujące będzie nie praca:
protected function _pre() {
$methodScopeVariable = 'whatever';
$this->require = new Access_Factory(function($url) {
echo $methodScopeVariable;
});
}
Zamiast tego, jeśli chcesz wprowadzić zmienne do zakresu zamknięcia jest, można użyć słowa kluczowego use
. Poniższy będzie praca:
protected function _pre() {
$methodScopeVariable = 'whatever';
$this->require = new Access_Factory(function($url) use ($methodScopeVariable) {
echo $methodScopeVariable;
});
}
W 5.3.x, można uzyskać dostęp do $this
z następującym obejścia:
protected function _pre() {
$controller = $this;
$this->require = new Access_Factory(function($url) use ($controller) {
$controller->redirect($url);
});
}
Zobacz this question and its answers więcej szczegółów.
Ach, dobrze jest wiedzieć, że jest inaczej w PHP5.4 (który jeszcze nie dotarł do moich pakietów stabilnych w Debianie) może być konieczne ręczne zainstalowanie). – Wrikken
Czy potrzebuję "użycia ($ this)" lub czy 5.4 automatycznie daje ci dostęp do $ this? – Charles
5.4.0+ automatycznie wiąże '$ this'. Sprawdź [to krótkie wideo] (http://youtu.be/-Ph7X6Y6n6g), wyjaśniając to. –