web-dev-qa-db-fra.com

Mode strict en PHP?

Les autres langues avec déclaration de variable automatique - comme Perl - ont un mode strict.

En activant ce mode strict, une déclaration de variable est requise et Perl génère une erreur dès que vous essayez d'utiliser une variable non déclarée.

Est-ce que PHP offre une fonctionnalité similaire?

59
jantimon

Genre de. Vous pouvez activer le niveau E_NOTICE dans votre rapport d'erreur . (Liste des constantes ici .)

Chaque instance d'utilisation d'une variable non déclarée génère un E_NOTICE.

L'erreur E_STRICT livel renverra également ces notifications, ainsi que d'autres astuces 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 fin au lieu de simplement afficher un avis lorsque vous rencontrez une variable non déclarée, vous pouvez créer un gestionnaire d'erreurs custom

Exemple de travail qui gère uniquement les notifications contenant "variable indéfinie" et transmet 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

 ?>
65
Pekka 웃

Utilisation

error_reporting(-1);

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 PHP 

( Référence )

36
Gordon

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

3
chelmertz

Vous pouvez vérifier error_reporting , et n'oubliez pas de définir également display_errors . Notez qu’il existe plusieurs niveaux de rapport d’erreur. 

2
gblazex

Après quelques années, PHP 7.0.0 a gagné declare(strict_types=1);

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict

2
Full

PHP is avertissement concernant les variables non déclarées par défaut, il vous suffit d'activer le niveau signalement des erreurs pour que les notifications s'affichent. Notez cependant que puisqu'il n'y a pas de syntaxe spéciale pour déclarer une variable dans PHP et que vous en déclarez simplement une en l'affectant, elle ne peut vous avertir que lorsque vous essayez de utiliser la valeur d'une variable non déclarée . Contrairement aux autres langages, les "assignations à des variables non déclarées" n'existent pas, donc PHP ne peut pas vous en avertir.

1
deceze

Utilisation

error_reporting(E_ALL);

au début de votre code PHP . Ou définissez le paramètre error_reporting dans votre fichier php.ini, pour le définir pour tous les fichiers PHP

1
JochenJung

Vous pouvez implémenter votre propre fonction de traitement des erreurs avec set_error_handler() .

Ensuite, vous pouvez réagir à certains niveaux d'erreur à votre guise.

Par exemple, au lieu d'afficher et de consigner un message d'erreur, vous pouvez terminer le script si une variable n'est pas déclarée correctement ou si une condition que vous n'aimez pas est remplie.

De cette façon, vous pouvez appliquer une politique très stricte pour tout code exécuté sur votre instance d'interpréteur PHP.

1
selfawaresoup

Je suggérerais que les exigences de rapport et de traitement des erreurs diffèrent selon votre environnement de développement et votre environnement de production réel (WWW, Intranet de la société, etc.). Pendant le développement, vous voudrez voir autant de détails que possible pour trouver et résoudre les problèmes. 

Dans l'environnement en direct, je pense que vous ne souhaitez pas afficher les messages d'erreur PHP aux utilisateurs, mais autoriser le script à continuer avec des fonctionnalités réduites (par exemple, un message du type "Désolé, nous ne pouvons pas mettre votre profil à jour". moment ", ou rediriger l'utilisateur vers la page d'accueil, etc.). Un moyen d'y parvenir serait d'utiliser des gestionnaires d'erreurs personnalisés pour chaque environnement.

0
Vincent

Oui, vous le faites avec un rapport d'erreur.

http://www.php.net/manual/en/function.error-reporting.php

0
Palantir