2016-07-11 3 views
0

Ich habe ein kleines Problem mit etwas Code, der auf der Entwicklung, aber nicht auf der Produktion funktioniert. Es ist seltsam, weil der ganze andere Code funktioniert (oder scheint).

Der gesamte Fehler ist folgende:

Fatal error: Using $this when not in object context in /[snip]/application/modules/manage_plugins/models/Manage_plugins.php on line 6 A PHP Error was encountered

Severity: Error

Message: Using $this when not in object context

Filename: models/Manage_plugins.php

Line Number: 6

Backtrace:

Von den anderen ähnlichen Fragen, die ich finden konnte, es den Leuten aufgrund versuchte „diese $“ in einem statischen Kontext zu verwenden - ich glaube nicht, dass ist der Fall für mich. Hier

ist der manage_plugins Konstruktor, mit der Linie 6 (Fehlerzeile) die ersten im Konstruktor sein:

class Manage_plugins extends CI_Model { 

    public function __construct() { 
     $this->mediator->attach("manage_load", function($name, $data) { $this->on_manage_load(); }); 

     $this->load->model("automediator"); 
    } 

} 

Es wird von dem folgenden Code geladen (und nie explizit genannt):

$CI =& get_instance(); 

$CI->load->model("manage_plugins/manage_plugins"); 

Weiß jemand, warum das passiert?

+1

Mögliche Duplikate? http://stackoverflow.com/questions/8391099/using-this-in-anonymous-function – rexmac

Antwort

0

Dank rexmarc konnte ich das Problem umgehen und eine ähnliche Struktur an PHP 5.3 von use -ing eine Kopie des Objekts $this in der anonymen Funktion arbeiten.

geändert ich folgendes:

class Manage_plugins extends CI_Model { 
    public function __construct() { 
     $this->mediator->attach("manage_load", function($name, $data) { $this->on_manage_load(); }); 

     $this->load->model("automediator"); 
    } 

} 

in:

class Manage_plugins extends CI_Model { 
    public function __construct() { 
     $me =& $this; 
     $this->mediator->attach("manage_load", function($name, $data) use($me) { $me->on_manage_load(); }); 

     $this->load->model("automediator"); 
    } 

} 

Eine andere Lösung für das gewesen sein könnte:

vor
class Manage_plugins extends CI_Model { 
    public function __construct() { 
     $this->mediator->attach("manage_load", [$this, 'on_manage_load']); 

     $this->load->model("automediator"); 
    } 

} 

Das Problem auftrat, weil in PHP-Versionen 5.4, ​​$this war in anonymen Funktionen nicht verfügbar.

5.4.0 - Anonymous functions may use $this, as well as be declared statically

Quelle: http://php.net/manual/en/functions.anonymous.php

Die Frage ging aufgrund unterschiedlicher PHP-Versionen auf der Entwicklung unbemerkt (5,5) und die Produktion (5.3).

Siehe auch: https://stackoverflow.com/a/19432335/3649573

Verwandte Themen