2016-05-04 10 views
2

Ich versuche, auf eine statische Klassenmitgliedsvariable in einem Array zuzugreifen.Konnte nicht auf statische Elementvariable von Klasse in Array zugreifen

My-Code (index.php):

<?php 

class Foo 
{ 
    public static $staticVar = 'test'; 
} 

class Bar 
{ 
    public $someArray = array(
     Foo::$staticVar 
    ); 
} 

$cls = new Bar(); 

var_dump($cls->someArray); 

?> 

auf PHP-7.0 erhalte ich diese Fehlermeldung:

PHP Fatal error: Constant expression contains invalid operations in /var/www/html/index.php on line 12

auf PHP-5.6 erhalte ich diese Fehlermeldung:

PHP Parse error: syntax error, unexpected '$staticVar' (T_VARIABLE), expecting identifier (T_STRING) or class (T_CLASS) in /var/www/html/index.php on line 11

Ich möchte nur die Zeichenfolge "test" in meinem Array haben.

Es ist seltsam, dass, wenn ich echo 'aus den Variablen es wie erwartet funktioniert:

echo Foo::$staticVar // prints 'test' 

Ich bin neu in PHP und ich kann nicht herausfinden, was ich ist falsch.

Antwort

2

Leider können Sie in der ursprünglichen Deklaration einer Klasseneigenschaft nicht auf eine andere Variable oder Klasse verweisen. Es ist nur eine Einschränkung der Sprache, wie sie ist. Die allgemeine Problemumgehung besteht darin, die Eigenschaft in dem Konstruktor zu initialisieren, z.

class Bar 
{ 
    public $someArray = array(); 

    public function __construct() 
    { 
     $this->someArray = array(
      Foo::$staticVar 
     ); 
    } 
} 

Auf einer vage in Verbindung stehenden Anmerkung 5.6 PHP dest habe auf einige vage Fortschritte machen in so dass Sie Konstanten als grundlegende Ausdrücke definieren, siehe https://3v4l.org/6TDZV

+0

gibt es also jede Problemumgehung die Zeichenfolge in das Array zu bekommen? Ich bin nur neugierig, wie ich diesen Fehler loswerden und/oder den "PHP-Weg" machen kann. – hecaex

+0

@hecaex Ein Beispiel zur Antwort hinzugefügt – iainn

+0

Danke dafür funktioniert wie ein Charme! – hecaex

Verwandte Themen