2017-02-26 1 views
1

In der Klasse unten, wenn instanziiert, erhalte ich folgende Fehlermeldung:

'$ this' (T_VARIABLE) in Ihrem Code in Zeile 12 ‚default_timestamp '=> $ this -> _ time,

Ich bin verwirrt, denn wenn das Objekt instanziiert wird, nehme ich an, $ _time ist zugänglich für die Verwendung, aber es scheint, es ist nicht. Ich versuchte auch 'default_timestamp' => time(), aber das warf auch einen Fehler. Missverstehe ich die Objekt-Instanziierung?

class DateTimeHandler { 

    public $_date; 
    public $_time = 'xxx'; 
    public $_datetime; 
    public $_timezone; 

    public $opts = array(
     'default_timezone' => 'America/New_York', 
     'default_timestamp' => $this->_time, 
     'formats' => array(
      'date' => 'Y-m-d', 
      'time' => 'g:ia', 
      'full' => 'Y-m-d H:i:s' 
     ) 
    ); 

    public function __construct() { 
     echo '<pre>', print_r($this->opts, true); 
    } 

} 

$d = new DateTimeHandler(); 

Antwort

2

Um Klassenmitglieder mit dynamischem Wert zu initialisieren, können Sie es nicht direkt tun. Verwenden Sie stattdessen __construct für denselben

class DateTimeHandler { 

    public $_date; 
    public $_time = 'xxx'; 
    public $_datetime; 
    public $_timezone; 

    public $opts = array(); 



    public function __construct() { 

     $this->opts = array(
     'default_timezone' => 'America/New_York', 
     'default_timestamp' =>time(), //OR $this->_time 
     'formats' => array(
      'date' => 'Y-m-d', 
      'time' => 'g:ia', 
      'full' => 'Y-m-d H:i:s' 
     ) 
    ); 

     echo '<pre>', print_r($this->opts, true); 
    } 

} 

$d = new DateTimeHandler(); 
+0

Das hat funktioniert, gibt es einen Grund, warum Sie es nicht direkt tun können? – Naterade

+0

verweisen Sie dies: http://php.net/manual/en/language.oop5.properties.php ** Initialisierung muss ein konstanter Wert sein - das heißt, es muss in der Lage sein, zur Kompilierzeit ausgewertet werden und darf nicht abhängen auf Laufzeitinformationen, um ausgewertet zu werden. ** –

Verwandte Themen