Maison >développement back-end >tutoriel php >Comment puis-je initialiser correctement des variables statiques complexes en PHP ?

Comment puis-je initialiser correctement des variables statiques complexes en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 17:44:11836parcourir

How Can I Properly Initialize Complex Static Variables in PHP?

Initialisation des variables statiques en PHP

Lors de l'initialisation des variables statiques en PHP, vous pouvez rencontrer des erreurs de syntaxe avec des expressions non triviales dans l'initialiseur, comme on le voit dans l'extrait de code ci-dessous :

private static $dates = array(
  'start' => mktime( 0,  0,  0,  7, 30, 2009),  // Start date
  'end'   => mktime( 0,  0,  0,  8,  2, 2009),  // End date
  'close' => mktime(23, 59, 59,  7, 20, 2009),  // Date when registration closes
  'early' => mktime( 0,  0,  0,  3, 19, 2009),  // Date when early bird discount ends
);

Solution de contournement :

Une solution consiste à éviter les expressions complexes dans l'initialiseur et à attribuer les valeurs après avoir défini la classe :

class Foo {
  static $bar;
}
Foo::$bar = array(…);

Une autre option consiste à utiliser une fonction statique pour initialiser la variable :

class Foo {
  private static $bar;
  static function init()
  {
    self::$bar = array(…);
  }
}
Foo::init();

PHP Amélioration 5.6 :

PHP 5.6 prend en charge certaines expressions dans les initialiseurs de variables statiques. Par exemple, vous pouvez définir une classe abstraite avec une fonction statique privée pour initialiser la variable :

abstract class Foo{
    private static function bar(){
        static $bar = null;
        if ($bar == null)
            bar = array(...);
        return $bar;
    }
    /* use where necessary */
    self::bar();
}

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:
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