Peu importe le soin avec lequel nous écrivons des programmes, les erreurs sont inévitables. Ces erreurs confondent généralement le compilateur PHP. Les messages d'erreur du compilateur sont non seulement inutiles mais souvent frustrants si les développeurs ne comprennent pas ce qu'ils signifient.
Lors de la compilation d'un script PHP, le compilateur PHP fait de son mieux pour signaler le premier problème qu'il rencontre. Cela crée un problème : PHP ne peut reconnaître l'erreur que lorsqu'elle se produit (ce problème est décrit en détail plus loin dans cet article). C’est pour cette raison que le compilateur souligne que la ligne erronée peut sembler syntaxiquement correcte en apparence, ou qu’il peut s’agir d’une ligne qui n’existe pas du tout !
Une meilleure compréhension des messages d'erreur peut réduire considérablement le temps passé à identifier et à corriger ce qui ne va pas. Par conséquent, dans cet article, je vais essayer de clarifier les nombreux types de messages d'erreur PHP et comment comprendre correctement la signification des différents messages d'erreur au cours du processus de développement.
Le contenu décrit dans cet article n'a rien à voir avec la version de PHP que vous utilisez, car les différentes erreurs décrites dans cet article ne se limitent pas à des erreurs spécifiques à une version particulière. De plus, nous supposons que vous êtes un programmeur junior ou intermédiaire et que vous êtes engagé dans la programmation depuis six mois ou un an.
Comment fonctionne le compilateur
Pour comprendre pourquoi le compilateur signale une erreur sur une certaine ligne, vous devez d'abord comprendre le mécanisme par lequel le compilateur analyse le code PHP. Je ne vais pas entrer dans les détails à ce sujet dans cet article, mais nous aborderons quelques concepts simples qui sont plus susceptibles de conduire à des erreurs.
Déclaration de variable
Si vous déclarez une variable dans une instruction, la méthode spécifique est la suivante :
$variable = 'value';
Le compilateur trouve d'abord la valeur de la moitié droite de l'instruction (c'est-à-dire tout ce qui se trouve à droite de l'égalité). signe). Dans certains livres de programmation, cela est représenté par la RHS (moitié droite) de l'instruction. C'est cette partie de la déclaration qui provoque souvent des erreurs. Si vous utilisez une syntaxe incorrecte, vous obtiendrez une erreur d'analyse.
Erreurd'analyse
: erreur d'analyse, T_WHILE inattendu dans c:\program files\apache group\apache\htdocs\script.php à la ligne 19.
Les erreurs d'analyse se succèdent à chaque fois que l'erreur précédente est déterminée. Continuez à apparaître. Étant donné que PHP arrête d'exécuter le script après la première erreur d'analyse, le débogage et la correction de cette série d'erreurs peuvent souvent s'avérer particulièrement fastidieux.
De plus, les erreurs d'analyse contiennent très peu d'informations, avec presque aucun rapport sur le numéro de ligne où l'erreur s'est produite. La raison spécifique est que lorsqu'une erreur se produit, le compilateur détermine que la syntaxe de plusieurs lignes doit paraître valide jusqu'à ce qu'elle rencontre une syntaxe invalide. Le cas le plus probable est que des mots prédéfinis sont utilisés dans l'expression, par exemple
while = 10 ; / Mauvais ? while est un mot prédéfini et ne peut pas être attribué à une valeur.
Les mots prédéfinis incluent while, fonction, etc. Si PHP utilise pour évaluer votre code, vous ne pouvez pas utiliser ces mots prédéfinis pour nommer des variables. Ceci, PHP signalera plus d'erreurs, que vous ne pouvez pas supporter.
Concernant ce problème, l'exemple suivant peut vous aider. Veuillez consulter et lire le code PHP ci-dessous :
<?php
$b = une valeur
si($b == une valeur){
imprimer Bonjour tout le monde !;
}
?>
L'erreur est sur la ligne $b = (point-virgule manquant à la fin de l'instruction), donc l'erreur devrait être une erreur d'analyse : point-virgule manquant à la ligne 3, n'est-ce pas ? Il ne doit pas être déterminé en fonction de l'analyseur :
Erreur d'analyse : erreur d'analyse, T_IF inattendu dans c:\program files\apache
group\apache\htdocs\ereg2.php à la ligne 4
À la ligne 4, la syntaxe de l'instruction if() est correcte. Alors, qu’est-ce qui rend le compilateur confus ? L'indice est la partie inattendue de T_IF. Lorsqu'une erreur T_??? inattendue se produit, cela signifie : le compilateur a constaté qu'un mot prédéfini apparaît à une position où il ne devrait pas apparaître. T_IF représente if(), T_WHILE représente while(), T_FOR représente for(), etc.
Heureusement, la cause de certaines erreurs est également simple :
l'instruction ne se termine pas par un point-virgule (;), comme dans l'exemple ci-dessus. Il manque des guillemets dans la chaîne.
Quelques autres erreurs courantes
L'erreur la plus courante que je vois est celle de ne pas fermer une fonction ou une boucle avec une accolade ( } ).
Le code spécifique est le suivant :
function UselessFunction() {
pour($i < 0; $i < 10; $i++){
}
L'erreur suivante sera générée :
Erreur d'analyse : erreur d'analyse, $ inattendu dans c:\program files\apache
group\apache\htdocs\ereg2.php en ligne 9
Puisque la fonction UselessFunction ne se termine pas par une accolade (}), le compilateur PHP continue de chercher l'accolade fermante jusqu'à ce qu'il atteigne la fin du fichier. Étant donné que le compilateur ne trouve pas d'accolade correspondante, il signale une erreur de fin de fichier.
Si la hiérarchie du code est correctement reflétée, les messages d'erreur deviendront très évidents. Si la structure hiérarchique du code n'est pas marquée, il sera presque impossible de savoir ce qui a finalement été oublié. N'oubliez donc pas d'indiquer la hiérarchie de votre code. La touche Tab rend cela facile. Il sera également plus facile pour les développeurs ultérieurs de comprendre le cadre du code et de le modifier.
Erreurs MySQL
Un autre message d'erreur extrêmement ennuyeux est l'erreur MySQL la plus courante, qui provoque souvent des maux de tête pour les nouveaux utilisateurs PHP : Attention : l'argument fourni n'est pas une ressource de résultat MySQL valide dans...
La ligne avec l'erreur signalée ci-dessus Cela peut être :
while ($row = mysql_fetch_array($result)) {
Le paramètre $result n'est pas une ressource valide. En anglais, cela signifie que mysql_fetch_array ne peut pas être traité car la requête a échoué. La syntaxe de l'une ou l'autre requête n'est pas valide (vous devez copier-coller la requête dans la référence de la console MySQL pour tester), ou la connexion à la base de données a échoué (auquel cas vous devez revérifier le nom d'utilisateur, le mot de passe, etc.).
Prévenir les erreurs
Dans un premier temps, les codeurs intelligents peuvent prendre les mesures suivantes pour éliminer les erreurs suivantes :
· Ne pensez pas à ajouter un point-virgule à la fin de chaque instruction – cela devrait devenir une habitude.
· Indiquez toujours la hiérarchie de votre code autant que possible. Cela vous permettra de voir si vous avez oublié d'ajouter des accolades à des endroits comme lors des appels ou à la fin des fonctions.
· Veuillez utiliser un éditeur avec coloration syntaxique (comme HTML-Kit). Avec l'aide d'un tel éditeur, vous pouvez déterminer si vous avez oublié d'ajouter un guillemet, s'il vous manque un point-virgule, etc.
Conclusion
Dans cet article, nous avons une certaine compréhension de certaines erreurs apparemment dénuées de sens que le compilateur PHP peut signaler. Nous devons appliquer ce que nous apprenons pour éviter les erreurs et les corriger lorsqu’elles se produisent. Le débogage est l’une des parties les plus importantes du travail d’un développeur. L'amélioration de l'efficacité du débogage peut considérablement accélérer la progression de l'ensemble du travail et réduire le temps nécessaire pour terminer un projet. Cela peut également réduire considérablement la pression mentale causée par une défaillance du code.