pouvez-vous initialiser un tableau statique d'objets dans une classe en PHP? Comme tu peux le faire
class myclass {
public static $blah = array("test1", "test2", "test3");
}
mais quand je fais
class myclass {
public static $blah2 = array(
&new myotherclass(),
&new myotherclass(),
&new myotherclass()
);
}
où myotherclass est défini juste au-dessus de myclass. Cela jette cependant une erreur; existe-t-il un moyen d'y parvenir?
Nan. De http://php.net/manual/en/language.oop5.static.php :
Comme toute autre PHP variable statique, les propriétés statiques ne peuvent être initialisées qu'en utilisant un littéral ou une constante; les expressions ne sont pas autorisées. Ainsi, alors que vous pouvez initialiser une propriété statique en un entier ou un tableau (par exemple) , vous ne pouvez pas l'initialiser dans une autre variable, dans une valeur de retour de fonction ou dans un objet.
Je voudrais initialiser la propriété à null
, la rendre privée avec une méthode d'accesseur et demander à l'accesseur de faire l'initialisation "réelle" la première fois qu'il est appelé. Voici un exemple:
class myclass {
private static $blah2 = null;
public static function blah2() {
if (self::$blah2 == null) {
self::$blah2 = array( new myotherclass(),
new myotherclass(),
new myotherclass());
}
return self::$blah2;
}
}
print_r(myclass::blah2());
Bien que vous ne puissiez pas l'initialiser pour avoir ces valeurs, vous pouvez appeler une méthode statique pour les pousser dans sa propre collection interne, comme je l'ai fait ci-dessous. Cela peut être aussi proche que possible.
class foo {
public $bar = "fizzbuzz";
}
class myClass {
static public $array = array();
static public function init() {
while ( count( self::$array ) < 3 )
array_Push( self::$array, new foo() );
}
}
myClass::init();
print_r( myClass::$array );
Démo: http://codepad.org/InTPdUCT
Ce qui se traduit par la sortie suivante:
Tableau ( [0] => foo Object ( [Bar] => fizzbuzz ) [1] => Objet foo ( [bar] => fizzbuzz ) [2] => Objet foo ( [bar] => fizzbuzz ) )