Maison développement back-end PHP7 Que faire si les variables statiques php7 ne peuvent pas être affectées aux tableaux

Que faire si les variables statiques php7 ne peuvent pas être affectées aux tableaux

Apr 23, 2023 am 09:10 AM

Avec la sortie de PHP 7, de nombreuses nouvelles fonctionnalités et améliorations apportent de meilleures performances et une meilleure lisibilité. Cependant, lors de l'utilisation de variables statiques, nous pouvons rencontrer un problème qui ne peut pas être attribué au tableau. Dans cet article, nous examinerons de plus près ce problème et comment le résoudre.

Avant PHP 7, nous pouvions stocker n'importe quel type de valeur dans des variables statiques, y compris des tableaux. Par exemple :

function test() {
    static $arr = array('a', 'b', 'c');
    print_r($arr);
}

test(); // 输出 ['a', 'b', 'c']
Copier après la connexion

Cependant, en PHP 7, ce code renvoie l'erreur suivante :

Fatal error: Constant expression contains invalid operations in /path/to/file.php on line 2
Copier après la connexion

C'est parce que PHP 7 a des restrictions plus strictes sur la façon dont les variables statiques peuvent être initialisées. Désormais, nous ne pouvons utiliser que des constantes pour initialiser des variables statiques.

Mais pourquoi ne pouvons-nous pas utiliser des tableaux pour initialiser des variables statiques en PHP 7 ? En effet, dans PHP 7, l'initialisation des variables statiques se fait au moment de la compilation et non au moment de l'exécution. Cela signifie qu'au moment de la compilation, PHP ne connaît pas la longueur du tableau ni les valeurs des éléments et ne peut donc pas déterminer la valeur initiale de la variable statique. En d’autres termes, PHP nécessite une constante définie pour initialiser les variables statiques, alors que les tableaux ne sont pas une constante.

Pour résoudre ce problème, nous pouvons utiliser une constante de classe au lieu d'un tableau. Étant donné que les constantes de classe sont analysées et évaluées au moment de la compilation, elles peuvent être utilisées pour initialiser des variables statiques. Par exemple :

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']
Copier après la connexion

Dans cet exemple, nous définissons une constante de classe nommée ARRAY et l'utilisons comme valeur pour initialiser la variable statique $arr. Nous utilisons self:: pour faire référence aux constantes de classe car elles appartiennent à des classes, pas à des objets. 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']
Copier après la connexion

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

En plus d'utiliser des constantes de classe, nous pouvons également utiliser des classes anonymes introduites dans PHP 7 pour initialiser des variables statiques. Une classe anonyme est une classe sans nom qui peut être créée et instanciée au moment de l'exécution. Ils sont généralement utilisés pour créer des objets et des fermetures simples.

Ce qui suit est un exemple d'utilisation d'une classe anonyme pour initialiser une variable statique : 🎜rrreee🎜Dans cet exemple, nous utilisons une classe anonyme pour créer un objet avec un seul attribut items. Nous utilisons $arr pour stocker la propriété items de cet objet et l'utilisons comme valeur initiale de la variable statique. Étant donné que les classes anonymes sont créées au moment de l'exécution, nous pouvons utiliser des tableaux pour initialiser des variables statiques. 🎜🎜En résumé, bien que PHP 7 ait des restrictions plus strictes sur la manière d'initialiser les variables statiques, nous pouvons utiliser des constantes de classe et des classes anonymes pour résoudre le problème de l'impossibilité d'attribuer des tableaux. Ces techniques s'appliquent non seulement aux variables statiques, mais également à d'autres scénarios nécessitant des valeurs initiales constantes. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles versions de PHP7 ont introduit de nouveaux opérateurs Quelles versions de PHP7 ont introduit de nouveaux opérateurs Mar 03, 2025 pm 04:37 PM

Cet article détaille les nouveaux opérateurs de PHP 7: The Null Coalesming (??), Spaceship (& lt; = & gt;) et les opérateurs de mise en placement nuls (?? =). Ceux-ci améliorent la lisibilité et les performances du code en simplifiant les contrôles et comparaisons nulles, indirectl

Quels sont les impacts des différentes versions de PHP7 sur la consommation de mémoire Quels sont les impacts des différentes versions de PHP7 sur la consommation de mémoire Mar 03, 2025 pm 04:35 PM

Les différences de version mineure de PHP 7 donnent des variations subtiles de consommation de mémoire. Alors que les versions plus récentes améliorent généralement les performances et l'efficacité de la mémoire via des optimisations de moteur Zend et de collecte des ordures, l'impact dépend de l'application. Signifier

Comment optimiser le code PHP7 pour améliorer les performances Comment optimiser le code PHP7 pour améliorer les performances Mar 03, 2025 pm 04:28 PM

Cet article examine l'optimisation du code PHP7 pour les performances. Il traite des goulots d'étranglement communs comme les requêtes de base de données inefficaces, les opérations d'E / S et les fuites de mémoire. Les solutions comprennent des pratiques de codage efficaces, des stratégies de base de données et de mise en cache, Asynch

Comment utiliser efficacement les séances en PHP 7? Comment utiliser efficacement les séances en PHP 7? Mar 10, 2025 pm 06:20 PM

Cet article détaille la gestion efficace de la session PHP 7, couvrant les fonctionnalités de base comme session_start (), $ _Session, Session_Destroy () et sécuriser la manipulation des cookies. Il met l'accent sur les meilleures pratiques de sécurité, y compris les HTTP, la régénération d'identification de session,

Quels bogues ont été corrigés dans la mise à jour de la version php7 Quels bogues ont été corrigés dans la mise à jour de la version php7 Mar 03, 2025 pm 04:36 PM

PHP 7 s'est considérablement amélioré lors des versions précédentes en abordant de nombreux bogues, en améliorant les performances et en renforçant la sécurité. Les améliorations clés comprenaient un moteur Zend réécrit, la gestion optimisée de la mémoire et la gestion des erreurs raffinées. Pendant que Gene

Quel impact la mise à jour de la version PHP7 a-t-elle sur le traitement des sessions? Quel impact la mise à jour de la version PHP7 a-t-elle sur le traitement des sessions? Mar 03, 2025 pm 04:31 PM

Cet article examine la gestion des sessions dans PHP7, mettant en évidence les améliorations des performances résultant du moteur Zend amélioré. Il traite des problèmes de compatibilité potentiels de la mise à niveau et des stratégies d'optimisation des détails pour la sécurité et l'évolutivité

Comment surveiller les performances PHP 7 avec des outils comme New Relic? Comment surveiller les performances PHP 7 avec des outils comme New Relic? Mar 10, 2025 pm 06:28 PM

Cet article explique comment surveiller les performances de l'application PHP 7 à l'aide d'une nouvelle relique. Il détaille la configuration de New Relic, les indicateurs de performances clés (KPI) comme le score APDEX et le temps de réponse, l'identification du goulot d'étranglement via des traces de transaction et une piste d'erreur

Comment passer de PHP 5.6 à PHP 7? Comment passer de PHP 5.6 à PHP 7? Mar 10, 2025 pm 06:29 PM

Cet article détaille la mise à niveau de PHP 5.6 vers PHP 7, en mettant l'accent sur les étapes cruciales comme le sauvegarde, la vérification de la compatibilité des serveurs et le choix d'une méthode de mise à niveau (gestionnaire de package, compilation, panneau de configuration ou configuration du serveur Web). Il aborde Potentia

See all articles