220 votes

Comment initialiser des variables statiques

J'ai ce code:

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
);

Ce qui me donne l'erreur suivante:

Parse error: syntax error, unexpected '(', expecting ')' in /home/utilisateur/Sites/site/inscription/inc/enregistrement.classe.inc à la ligne 19

Donc, je suppose que je suis en train de faire quelque chose de mal... mais comment puis-je faire si pas comme cela? Si je change le mktime des trucs avec des régulière des chaînes, il fonctionne. Donc, je sais que je peux faire ce genre de comme ça..

Quelqu'un aurait quelques conseils?

358voto

porneL Points 42805

PHP ne peut pas analyser les expressions non négligeable dans les initialiseurs.

Je préfère contourner ce problème en ajoutant le code juste après la définition de la classe :

ou


5.6 PHP peut gérer certaines expressions maintenant, mais toujours pas de baies.

34voto

Emanuel Landeholm Points 539

Si vous avez un contrôle sur le chargement de classe, vous pouvez faire une initialisation statique de là.

Exemple :

dans votre chargeur de classes, procédez comme suit :

Un poids plus lourd solution serait d’utiliser une interface avec ReflectionClass :

dans votre chargeur de classes, procédez comme suit :

23voto

diggie Points 307

Au lieu de trouver un moyen d’obtenir des variables statiques de travail, je préfère créer simplement une fonction d’accesseur Get. Aussi utile si vous devez les tableaux appartenant à une classe spécifique et beaucoup plus simple à mettre en œuvre.

Partout où vous avez besoin de la liste, il suffit d’appeler la méthode d’accesseur Get. Par exemple :

12voto

Mambazo Points 36

J’utilise une combinaison de la réponse de Tjeerd Visser et de porneL.

Mais une solution plus efficace est d’en finir avec les méthodes statiques et d’utiliser le pattern Singleton. Alors vous venez de faire l’initialisation compliquée dans le constructeur. Ou faire un « service » et DI permet d’injecter dans n’importe quelle classe qui en a besoin.

10voto

Alister Bulman Points 12913

C’est trop complexe pour définir dans la définition. Vous pouvez définir la définition de nul bien et puis dans le constructeur, le vérifier et si il n’a pas été modifié - mettre :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X