2016-03-25 6 views
-1

Ich sehe einige seltsame Fehler auf meiner Client-Website. Es ist Code, den jemand anders für ihn für seine Bewerbung gemacht hat. Die Fehlermeldung besagt, dass $this, wenn nicht im Objektkontext, sondern die Class wurde erweitert, wo von App.

Bitte helfen Sie.

Fehler

Fatal error: Using $this when not in object context in contactController.php on line 6

contactController.php

class contactController extends App{  
    public function index(){ 
     $this->view('content'); //error mmessage is pointing here 
    } 
} 

app.php

class App{ 

    public $controller; 
    public $method; 
    public $params = []; 

    public function view($file){ 
     include(site_path() . '/views/' . $file . '.php'); 
    } 

    public function model($file){ 
     require_once(site_path() . '/models/' . $file . '.php'); 
    } 

    public function engine(){ 
     global $core_current_ControllerMethod, $core_current_controller, $core_current_method; 
     //Get the current controller and method from a helper function 
     $get_wc_cm = get_wc_cm(); 
     //Assign it to the global variable 
     $core_current_ControllerView = $get_wc_cm; 
     //Seperate the controller and method 
     $cm = explode('@', $get_wc_cm); 
     $controller = !empty($cm[0])? $cm[0]: null; // This is the controller 
     $method = !empty($cm[1])? $cm[1]: null; // This is the method 
     //Assign it to the global varaible 
     $core_current_controller = $controller; 
     $core_current_method = $method; 
     //Assign it to the class variable 
     $this->controller = $controller; 
     $this->method = $method; 

     $ControllerFile = site_path(). '/controllers/' . $this->controller . '.php'; 
     if(file_exists($ControllerFile)){ 
      require_once($ControllerFile); 
      new $this->controller; 
      $callback = is_callable(array($this->controller, $this->method), false); 
      if($callback){ 
       call_user_func_array([$this->controller, $this->method], [$this->params]); 
      } 
     } 
    } 

} 

$app = (new App)->engine(); 
+0

Könnte es sein, dass das Verfahren von seinem Konstruktor aufgerufen wird? – arkascha

+0

TBH, du solltest die gesamte Codebasis dort mit Feuer reinigen, bevor es Eier legt –

+0

@Martin Es ist kein Duplikat. Meine Frage unterscheidet sich von der Antwort, auf die Sie sich beziehen. –

Antwort

1

Versuchen zu ändern:

class contactController extends App{  
    public function index(){ 
     $this->view('content'); //error mmessage is pointing here 
    } 
} 

An:

class contactController extends App{  
    public function index(){ 
     parent::view('content'); //error mmessage is pointing here 
    } 
} 
+0

Wäre es nicht sinnvoll, zuerst zu verstehen, warum der Fehler ausgelöst wird, bevor _and_ etwas anderes? Programmierung ist kein Ratespiel ... – arkascha

+0

@Pierre Ihre Lösung funktioniert. Es wäre schön, wenn Sie erklären könnten, warum es passiert ist. Wenn du kannst. –

+0

Ich denke, dass der Unterschied ist, dass parent :: die Implementierung des Parents aufruft, während $ this-> die Implementierung des Childs aufruft, wenn das Kind eine eigene Implementierung hat, anstatt sie vom Parent zu erben. Die Idee besteht darin, zu vermeiden, dass die Kindklasse eine neu implementierte Methode in der Elternklasse sucht, die nicht existiert. Sie können $ this verwenden, wenn Sie eine Sichtmethode in der Kindklasse haben. – Pierre

Verwandte Themen