Heim Backend-Entwicklung PHP7 Was tun, wenn statische PHP7-Variablen Arrays nicht zugewiesen werden können?

Was tun, wenn statische PHP7-Variablen Arrays nicht zugewiesen werden können?

Apr 23, 2023 am 09:10 AM

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']
Nach dem Login kopieren

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
Nach dem Login kopieren

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']
Nach dem Login kopieren

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']
Nach dem Login kopieren

在这个例子中,我们使用一个匿名类来创建一个只有一个属性items的对象。我们使用$arr来存储这个对象的items

Zusätzlich zur Verwendung von Klassenkonstanten können wir auch in PHP 7 eingeführte anonyme Klassen verwenden, um statische Variablen zu initialisieren. Eine anonyme Klasse ist eine Klasse ohne Namen, die zur Laufzeit erstellt und instanziiert werden kann. Sie werden typischerweise zum Erstellen einfacher Objekte und Abschlüsse verwendet.

Das Folgende ist ein Beispiel für die Verwendung einer anonymen Klasse zum Initialisieren einer statischen Variablen: 🎜rrreee🎜In diesem Beispiel verwenden wir eine anonyme Klasse, um ein Objekt mit nur einem Attribut 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Versionen von PHP7 haben neue Operatoren eingeführt? Welche Versionen von PHP7 haben neue Operatoren eingeführt? Mar 03, 2025 pm 04:37 PM

Dieser Artikel beschreibt die neuen Operatoren von Php 7: Die Null -Koalescing (??), Spaceship (& lt; = & gt;) und Null -Koalescing -Zuordnung (?? =) Operatoren. Diese verbessern die Lesbarkeit und Leistung der Code, indem Nullprüfungen und -vergleiche vereinfacht werden, Indirectl

Was sind die Auswirkungen verschiedener Versionen von PHP7 auf den Speicherverbrauch? Was sind die Auswirkungen verschiedener Versionen von PHP7 auf den Speicherverbrauch? Mar 03, 2025 pm 04:35 PM

Minor -Versionsunterschiede von PHP 7 liefern subtile Variationen des Speicherverbrauchs. Während neuere Versionen im Allgemeinen die Leistung und den Speicher-Effizienz über die Optimierung von Zend Engine und Müllsammlungen verbessern, sind die Auswirkungen anwendungsabhängig. Signifikant

So optimieren Sie den PHP7 -Code, um die Leistung zu verbessern So optimieren Sie den PHP7 -Code, um die Leistung zu verbessern Mar 03, 2025 pm 04:28 PM

In diesem Artikel optimieren Sie den PHP7 -Code für die Leistung. Es befasst sich mit gängigen Engpässen wie ineffizienten Datenbankabfragen, E/A -Operationen und Speicherlecks. Zu den Lösungen gehören effiziente Codierungspraktiken, Datenbank- und Caching -Strategien, Asynch

Wie nutze ich Sitzungen effektiv in PHP 7? Wie nutze ich Sitzungen effektiv in PHP 7? Mar 10, 2025 pm 06:20 PM

In diesem Artikel wird das effektive PHP 7 -Sitzungsmanagement beschrieben, das Kernfunktionen wie Session_Start (), $ _Session, Session_destroy () und Secure Cookie -Handhabung abdeckt. Es betont die Best Practices der Sicherheitsbekämpfung, einschließlich HTTPS, Sitzungs -ID -Regeneration, s

Welche Fehler wurden im PHP7 -Versions -Update behoben Welche Fehler wurden im PHP7 -Versions -Update behoben Mar 03, 2025 pm 04:36 PM

PHP 7 verbesserte sich bei früheren Versionen erheblich, indem sie zahlreiche Fehler ansprach, die Leistung verbessern und die Sicherheit stärken. Zu den wichtigsten Verbesserungen gehörten eine umgeschriebene Zend -Engine 3, eine optimierte Speicherverwaltung und eine raffinierte Fehlerbehandlung. Während Gene

Welche Auswirkungen hat das PHP7 -Versions -Update auf die Sitzungsverarbeitung? Welche Auswirkungen hat das PHP7 -Versions -Update auf die Sitzungsverarbeitung? Mar 03, 2025 pm 04:31 PM

In diesem Artikel wird die Sitzung der Sitzung in PHP7 untersucht, in der die Leistungsverbesserungen hervorgehoben werden, die sich aus der erweiterten Zend -Engine ergeben. Es werden potenzielle Kompatibilitätsprobleme aus Upgrade und Details von Optimierungsstrategien für Sicherheit und Skalierbarkeit erörtert

Wie kann man PHP 7 -Leistung mit Tools wie New Relic überwachen? Wie kann man PHP 7 -Leistung mit Tools wie New Relic überwachen? Mar 10, 2025 pm 06:28 PM

In diesem Artikel wird erläutert, wie die PHP 7 -Anwendungsleistung mithilfe von New Relic überwacht wird. Es enthält die Einrichtung von New Relic, die wichtigsten Leistungsindikatoren (KPIs) wie APDEX -Score und Reaktionszeit, Engpassidentifikation über Transaktionsspuren und Fehlerspuren

Wie Upgrade von PHP 5.6 auf Php 7? Wie Upgrade von PHP 5.6 auf Php 7? Mar 10, 2025 pm 06:29 PM

In diesem Artikel wird das Upgrade von PHP 5.6 auf PHP 7 aufgeführt und wichtige Schritte wie das Sichern, die Überprüfung der Serverkompatibilität und die Auswahl einer Upgrade -Methode (Paketmanager, Kompilieren, Bedienfeld oder Webserverkonfiguration) betont. Es spricht Potentia an

See all articles