Heim > Artikel > Backend-Entwicklung > Was tun, wenn statische PHP7-Variablen Arrays nicht zugewiesen werden können?
Mit der Veröffentlichung von PHP 7 sorgen viele neue Funktionen und Verbesserungen für eine bessere Leistung und Lesbarkeit. Bei der Verwendung statischer Variablen kann es jedoch zu Problemen kommen, die nicht dem Array zugeordnet werden können. In diesem Artikel werfen wir einen genaueren Blick auf dieses Problem und wie man es beheben kann.
Vor PHP 7 konnten wir jede Art von Wert in statischen Variablen speichern, einschließlich Arrays. Zum Beispiel:
function test() { static $arr = array('a', 'b', 'c'); print_r($arr); } test(); // 输出 ['a', 'b', 'c']
In PHP 7 löst dieser Code jedoch den folgenden Fehler aus:
Fatal error: Constant expression contains invalid operations in /path/to/file.php on line 2
Dies liegt daran, dass PHP 7 strengere Einschränkungen hinsichtlich der Initialisierung statischer Variablen hat. Jetzt können wir Konstanten nur noch zum Initialisieren statischer Variablen verwenden.
Aber warum können wir in PHP 7 keine Arrays verwenden, um statische Variablen zu initialisieren? Dies liegt daran, dass in PHP 7 die Initialisierung statischer Variablen zur Kompilierungszeit und nicht zur Laufzeit erfolgt. Dies bedeutet, dass PHP zur Kompilierungszeit die Länge des Arrays und die Werte der Elemente nicht kennt und daher den Anfangswert der statischen Variablen nicht bestimmen kann. Mit anderen Worten: PHP benötigt eine bestimmte Konstante, um statische Variablen zu initialisieren, während Arrays keine Konstanten sind.
Um dieses Problem zu lösen, können wir eine Klassenkonstante anstelle eines Arrays verwenden. Da Klassenkonstanten zur Kompilierungszeit analysiert und ausgewertet werden, können sie zum Initialisieren statischer Variablen verwendet werden. Zum Beispiel:
class Test { const ARRAY = array('a', 'b', 'c'); public function test() { static $arr = self::ARRAY; print_r($arr); } } $test = new Test(); $test->test(); // 输出 ['a', 'b', 'c']
In diesem Beispiel definieren wir eine Klassenkonstante mit dem Namen ARRAY
und verwenden sie als Wert, um die statische Variable $arr
zu initialisieren. Wir verwenden self::
, um auf Klassenkonstanten zu verweisen, da sie zu Klassen und nicht zu Objekten gehören. ARRAY
的类常量,并将其用作初始化静态变量$arr
的值。我们使用self::
来引用类常量,因为它们属于类,而不是对象。
除了使用类常量外,我们还可以使用PHP 7引入的匿名类来初始化静态变量。匿名类是一种没有名称的类,可以在运行时被创建和实例化。它们通常用于创建简单的对象和闭包。
以下是一个使用匿名类初始化静态变量的例子:
function test() { static $arr; if (!isset($arr)) { $arr = (new class { public $items = array('a', 'b', 'c'); })->items; } print_r($arr); } test(); // 输出 ['a', 'b', 'c']
在这个例子中,我们使用一个匿名类来创建一个只有一个属性items
的对象。我们使用$arr
来存储这个对象的items
items
zu erstellen. Wir verwenden $arr
, um die Eigenschaft items
dieses Objekts zu speichern und sie als Anfangswert der statischen Variablen zu verwenden. Da zur Laufzeit anonyme Klassen erstellt werden, können wir Arrays verwenden, um statische Variablen zu initialisieren. 🎜🎜Zusammenfassend lässt sich sagen, dass PHP 7 zwar strengere Einschränkungen hinsichtlich der Initialisierung statischer Variablen hat, wir jedoch Klassenkonstanten und anonyme Klassen verwenden können, um das Problem zu lösen, dass keine Arrays zugewiesen werden können. Diese Techniken gelten nicht nur für statische Variablen, sondern auch für andere Szenarien, die konstante Anfangswerte erfordern. 🎜Das obige ist der detaillierte Inhalt vonWas tun, wenn statische PHP7-Variablen Arrays nicht zugewiesen werden können?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!