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']
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
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']
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']
在这个例子中,我们使用一个匿名类来创建一个只有一个属性items
的对象。我们使用$arr
来存储这个对象的items
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!