Considérez le code suivant, dans lequel le setter est délibérément cassé en raison d'une erreur de programmation banale que j'ai commise à plusieurs reprises dans le passé:
<?php
class TestClass {
private $testField;
function setField($newVal) {
$testField = $newVal;
// deliberately broken; should be `$this->testField = $newVal`
}
function getField() {
return $this->testField;
}
}
$testInstance = new TestClass();
$testInstance->setField("Hello world!");
// Actually prints nothing; getField() returns null
echo $testInstance->getField();
?>
Le fait que j'ai déclaré $testField
en haut de la classe aide à me cacher cette erreur de programmation. Si je n'avais pas déclaré le champ, j'obtiendrais quelque chose de similaire à l'avertissement suivant imprimé dans mon journal d'erreurs lors de l'appel de ce script, ce qui pourrait être utile pour aider mon débogage - surtout si je faisais une erreur comme celle-ci dans une application réelle et complexe:
Remarque PHP: Propriété non définie: TestClass :: $ testField dans /var/www/test.php sur la ligne 13
Avec la déclaration, il n'y a pas d'avertissement.
Peut-être que je manque quelque chose, mais je ne connais que deux raisons pour déclarer des champs de classe en PHP: premièrement, que les déclarations agissent comme documentation, et deuxièmement, que sans déclarations, on ne peut pas utiliser les modificateurs private
et protected
access, qui sont sans doute utile. Puisque ce dernier argument ne s'applique pas aux champs publics - l'attribution à un champ non déclaré d'un objet le rend public - il me semble que je devrais au moins commenter toutes mes déclarations de champs publics. Les commentaires fourniront exactement la même valeur de documentation, mais je bénéficierai d'avertissements si j'essaie de lire un champ non initialisé.
Après réflexion, cependant, il ne semble pas logique de s'arrêter là. Étant donné que dans mon expérience, essayer de lire un champ non initialisé est une cause d'erreur beaucoup plus courante que d'essayer de lire ou de modifier de manière inappropriée un champ privé ou protégé (j'ai déjà fait plusieurs fois le premier dans ma courte carrière de programmation, mais jamais le dernier ), il me semble que commenter toutes les déclarations de champ - pas seulement les déclarations publiques - serait la meilleure pratique.
Ce qui me fait hésiter, c'est que je n'ai jamais vu personne d'autre le faire dans leur code. Pourquoi pas? Y a-t-il un avantage à déclarer des champs de classe que je ne connais pas? Ou puis-je modifier la configuration de PHP d'une manière ou d'une autre pour changer le comportement des déclarations de champ afin que je puisse utiliser de vraies déclarations de champ tout en bénéficiant des avertissements "Propriété non définie"? Ou y a-t-il autre chose que j'ai manqué dans mon analyse?
TRUE === $variable
pour vous empêcher d'attribuer accidentellement au lieu de comparer.