2017-09-15 3 views
0

Je me demande pourquoi est-ce que mon initialisation variable statique ne fonctionne pas avec la déclaration suivante:"Erreur fatale PHP: l'expression constante contient des opérations invalides", lors de l'initialisation d'une ligne statique?

function validate() 
{ 
    static $timezones = DateTimeZone::listIdentifiers(); // Error here 

    ... 
} 

La ligne avec static ... génère l'erreur:

PHP Fatal error: Constant expression contains invalid operations

Si je fais ce qui suit, bien que , il fonctionne comme prévu:

function validate() 
{ 
    static $timezones = null; 
    if(!isset($timezones)) 
    { 
     $timezones = DateTimeZone::listIdentifiers(); 
    } 
    ... 
} 

Donc, j'ai un moyen de contourner le problème, mais je me demande pourquoi est-ce que le fi Première méthode échoue?

+0

Veuillez arrêter le spam. Votre message ne peut pas être C++ et PHP simultanément, et ce n'est absolument pas le code C++ que vous avez posté. Vous n'êtes pas nouveau ici; vous savez comment fonctionnent les tags. Arrêtez de les ajouter au hasard. –

+0

Pourquoi cela échoue expliqué dans le message d'erreur. – zerkms

+0

@KenWhite Ah ... Désolé, c'était un tag suggéré et puisque je fais beaucoup de C++ aussi ... Merci pour le montage. –

Répondre

2

Basé sur la documentation de php; Vous ne pouvez pas initialiser une variable statique avec une autre expression ou variable non constante.

Ce qui signifie que si vous voulez d'attribuer une valeur à une variable statique, cette valeur doit être un entier, chaîne, etc.

Ce que vous avez ici est contre la règle statique de mot en PHP vous assignez une valeur dynamique à $ timezones variables

static $timezones = DateTimeZone::listIdentifiers(); // Error here 

Vérifiez pour plus d'informations.

http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

+0

oui vous avez raison je devrais le rendre plus clair –

+0

Ah, vous nous avez donné le mauvais lien, le lien correct est celui-ci: http://php.net/manual/fr/language.variables.scope.php#language. variables.scope.static puisque mon exemple montre une variable statique dans une fonction, pas dans un objet. Et une constante n'est pas requise. Vous pouvez avoir une expression, mais pas d'appel de fonction. –

+0

Je change ma réponse. –