65 votes

Mode strict en PHP

D'autres langages avec déclaration automatique des variables - comme Perl - ont un mode strict.

En activant ce mode strict, la déclaration des variables est obligatoire, et Perl lance une erreur dès que vous essayez d'utiliser une variable non déclarée.

PHP offre-t-il une fonctionnalité similaire ?

2 votes

Depuis la version 7 PHP supporte le mode strict il suffit de mettre declare(strict_types=1); au début de chaque fichier script, avant la déclaration de l'espace de nom.

2 votes

@Code4R7 C'est un autre type de mode strict que celui mentionné dans la question.

0 votes

Vrai. Revenir à error_reporting(E_STRICT); .

67voto

Pekka 웃 Points 249607

Genre de. Vous pouvez activer le E_NOTICE dans votre notification des erreurs . (Liste des constantes aquí .)

Chaque utilisation d'une variable non déclarée entraînera l'envoi d'un message d'erreur E_NOTICE .

En E_STRICT Ces avis seront également affichés, ainsi que d'autres conseils sur la façon d'optimiser votre code.

error_reporting(E_STRICT);

Terminer le script

Si vous êtes vraiment sérieux, et que vous voulez que votre script soit résilier Au lieu de simplement afficher un avis lorsqu'une variable non déclarée est rencontrée, vous pouvez construire un fichier gestionnaire d'erreurs personnalisé .

Un exemple fonctionnel qui ne traite que E_NOTICE avec "Undefined variable" et transmet tout le reste au gestionnaire d'erreurs PHP par défaut :

<?php

error_reporting(E_STRICT);

function terminate_missing_variables($errno, $errstr, $errfile, $errline)
{                               
  if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable")))
   die ("$errstr in $errfile line $errline");

  return false; // Let the PHP error handler handle all the rest  
}

$old_error_handler = set_error_handler("terminate_missing_variables"); 

echo $test; // Will throw custom error

xxxx();  // Will throw standard PHP error

 ?>

0 votes

Oui, il l'est en quelque sorte, mais pas dans son ensemble comme les autres langages de type strict.

1 votes

@sAc yup, il y a d'autres choses qui sont produites en tant qu'avis aussi, donc ils apparaîtront aussi quand vous activez ceci. (Et évidemment, ce n'est pas aussi strict que dans un langage fortement typé).

0 votes

Merci votre code fonctionne très bien ! J'ai modifié die en throw pour rediriger la sortie vers la vue Zend Error Trace.

40voto

Gordon Points 156415

Utilisez

error_reporting(-1);

pour montrer toutes les erreurs possibles, y compris E_STRICT et même lorsque de nouveaux niveaux et constantes sont ajoutés dans les futures versions de PHP.

( Référence )

2 votes

Error_reporting(-1) est-il identique à error_reporting(E_STRICT) ?

0 votes

@Pacerier non, -1 active tous les rapports d'erreurs actuels et futurs. Voir le Conseil en bas de la page du manuel PHP.

5 votes

Les constantes E_STRICT et ainsi de suite sont des bitmaps. En les combinant avec un OU, vous définissez les bits. -1 activera tous les bits. Exemple : A = 1 ; b(00000001) B = 2 ; b(00000010) A OU B = 3 (00000011) ; -1 = b(11111111)

3voto

chelmertz Points 8774

Oui, le type error_reporting(E_STRICT|E_ALL); au début de votre script.

0 votes

Seulement avant PHP 5.4.0, vous avez besoin de E_STRICT explicitement. Voir php.net/manual/fr/function.error-reporting.php donde E_STRICT fait partie de E_ALL depuis la version 5.4.0.

0 votes

Mais seulement au moment de l'exécution, pas au moment de l'analyse (si cela existe) ?

0 votes

@PeterMortensen Oui, comme la plupart des choses en PHP, c'est le temps d'exécution. error_reporting() peut être ajustée plusieurs fois, de sorte qu'elle n'affecte l'exécution que lorsque le niveau de signalement des erreurs est suffisamment élevé. PHP inclut tout dans le temps d'exécution, la logique commune des modèles (c'est-à-dire tout le code PHP) dépend de la référence à des variables non définies, qui sont ensuite définies par un autre script qui nécessite le "modèle", définissant ainsi les variables (certains termes simplifiés/ad hoc ici mais vous comprenez l'idée).

2voto

galambalazs Points 24393

Vous pouvez vérifier error_reporting et n'oubliez pas de définir display_errors également. Notez qu'il existe plusieurs niveaux de rapports d'erreurs.

1voto

deceze Points 200115

PHP es sur les variables non déclarées par défaut ; il suffit de désactiver l'option notification des erreurs pour que vous puissiez voir les avis. Notez cependant que puisqu'il n'y a pas de syntaxe spéciale pour déclarer une variable en PHP et que vous la déclarez simplement en l'assignant, il ne peut vous avertir que lorsque vous essayez de utiliser la valeur d'une variable non déclarée. Contrairement à d'autres langages, les "assignations à des variables non déclarées" n'existent pas, donc PHP ne peut pas vous avertir à ce niveau.

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