2014-01-25 4 views
6

Ich habe versucht, auf meine Instanz im Konstruktor mit der Variablen $ this zuzugreifen; In allen anderen Verfahren es Arbeit gut scheinen, wenn ich $this->event->method() nennen, aber auf dieser Methode wirft es mir einen Fehler

$ this verwenden, wenn sie nicht in Objektkontext

Ich habe gerade eine Forschung über dieses Thema und Die Antworten, die ich fand, waren alles über die Version von PHP, aber ich habe die Version 5.4. Was kann das Problem sein?

Dies ist die Methode, die ich versuche, die Instanz aufzurufen.

// all protected variable $event , $team , $app 
function __construct(EventTeamInterface $event,TeamInterface $team) { 
    $this->event = $event; 
    $this->team = $team; 
    $this->app = app(); 
    } 

    /** 
    * @param $infos array() | 
    * @return array() | ['status'] | ['msg'] | ['id'] 
    */ 
    public static function createEvent($infos = array()){ 
     $create_event = $this->event->create($infos); 
     if ($create_event) { 
      $result['status'] = "success"; 
      $result['id'] = $create_event->id; 
     } else { 
      $result['status'] = "error"; 
      $result['msg'] = $create_event->errors(); 
     } 

     return $result; 
    } 

Antwort

15

Sie können nicht $this verwenden, wenn Sie in der statischen Methode. Statische Methoden kennen den Objektstatus nicht. Sie können sich nur auf statische Eigenschaften und Objekte beziehen, indem Sie self:: verwenden. Wenn Sie das Objekt selbst verwenden möchten, müssen Sie das Gefühl haben, außerhalb der Klasse zu sein, also müssen Sie eine Instanz erstellen, aber dies wird nicht verstehen, was zuvor im Objekt passiert ist. I.e. Wenn eine Methode die Eigenschaft $_x auf einen Wert geändert hat, verlieren Sie diesen Wert, wenn Sie das Objekt erneut hinzufügen.

in Ihrem Fall können Sie jedoch tun

$_this = new self; 
$_this->event->create($info); 

Sie können auch nicht statische Methoden als statische self::method() nennen, aber in neueren Versionen von PHP Sie werden Fehler für dieses nicht erhalten, so ist es besser, es nicht zu tun.

die Informationen über sie, Sie in der offiziellen PHP-Dokumentation finden Sie unter: http://www.php.net/manual/en/language.oop5.static.php

Da statische Methoden aufrufbar sind, ohne eine Instanz des Objekts erstellt, die Pseudo-Variable $ ist dies innerhalb der nicht verfügbar Verfahren als statische

erklärt

Aufruf nicht-statische Methoden statisch Gen Erzeugt eine E_STRICT-Stufe Warnung.

+0

Vielen Dank für die präzise und klare Antwort! – Fabrizio

+0

Ab PHP 5.4.0 unterstützen Closures (anonyme Funktionen) nun $ this: http://php.net/manual/en/migration54.new-features.php –

Verwandte Themen