2017-10-21 3 views
1

Ich bin neu in der Idee der Verwendung von Merkmalen. Mein Verständnis ist, dass Verhalten horizontal in Klassen geteilt werden kann. In meinem Projekt wird der folgende Code wiederholt am Anfang jeder Klasse verwendet.Nicht definierte Variable in Merkmal Konstruktor

class Loader { 

    protected $options; 

    /** 
    * Loader constructor. 
    */ 
    public function __construct() { 
     $this->options = get_option('xenword_options'); 
     $this->init(); 
    } 

Da dies in Dutzenden von Klassen getan wird, wäre der Aufbau eines Merkmals eine gute Richtung zu verfolgen?

Das war mein fehlgeschlagener Versuch. Eine Datei namens Options.php wurde erstellt. Die Inhalte sind folgende:

trait getOptions { 
    public $options; 

    public function __construct() { 
     $this->$options = get_option('xenword_options'); 
    } 
} 

Leider gibt PHPStorm eine Nachricht Undefinierte Variable 'Optionen.' Dies ist kein Problem, wenn dieser Code in einer Klassenstruktur ist.

Da ich zu den Eigenschaften neu bin, würde jeder möglicher Rat und Zeiger geschätzt. Vielen Dank im Voraus.

Antwort

1

Sie sind fast da.

@SignpostMarv ist in dem Teil richtig, dass die $this->$option falsch es ist, nicht weil es ein Syntaxfehler ist, sondern weil es ein Tippfehler mit den $ ist, sollte ->options nicht ->$options sein (man kann http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b überprüfen).

Und jetzt, dass Sie die Eigenschaft haben, müssen Sie es in den Klassen

class Loader { 
    use starter; 
} 

trait starter { 
    protected $options; 

    public function __construct() { 
     $this->options = 'xenword_options'; 
     $this->init(); 
    } 

    public function init() { 
     $myClass = __CLASS__; 
     echo "{$myClass} started"; 
    } 
} 

sind es zu testen, tun nur new Loader() die Meldung zu sehen. (Check: http://sandbox.onlinephpfunctions.com/code/55b517142fb8d74b8b5a3e2246c79b6428330297)

+0

Danke! Ich habe den $ absolut verpasst. – LPH

0

$ this -> $ options ist ein Syntaxfehler.

Sie wollen $ this-> Optionen.

+0

_ $ this -> Optionen $ ist eine Syntax error._ dies nicht wahr ist (Check: http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b) – mloureiro

+0

werde ich Phrase es eine andere Weg; $ options existiert nicht innerhalb des Bereichs, daher löst es einen Fehler aus. Sie möchten $ this-> options verwenden. – SignpostMarv