次のコードを考えてみましょう。セッターは、過去に何度か実際に行ったプログラミングエラーのために意図的に壊れています。
<?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();
?>
$testField
クラスのトップで宣言したという事実は、そのプログラミングエラーを隠すのに役立ちます。フィールドを宣言していなかった場合、このスクリプトを呼び出すとエラーログに次の警告に似たものが出力されます。これは、デバッグを支援するのに役立つ可能性があります。大規模で複雑な実世界のアプリケーション:
PHP Notice:未定義のプロパティ:13行目の/var/www/test.phpのTestClass :: $ testField
宣言では、警告はありません。
おそらく何かが足りないかもしれませんが、PHPでクラスフィールドを宣言する理由は2つしかありません。1つ目は宣言がドキュメントとして機能すること、2つ目は宣言なしではprivate
and protected
アクセス修飾子を使用できないことです。間違いなく便利です。後者の引数はパブリックフィールドには適用されないため(オブジェクトの宣言されていないフィールドに割り当てるとオブジェクトがパブリックになります)、少なくともすべてのパブリックフィールド宣言をコメントアウトする必要があるように思えます。コメントはまったく同じドキュメント値を提供しますが、初期化されていないフィールドを読み取ろうとすると警告が表示されます。
しかし、さらに考えてみると、そこで停止するのは意味がないようです。私の経験では、初期化されていないフィールドを読み取ろうとすることは、プライベートまたは保護されたフィールドを不適切に読み取ったり変更しようとするよりもはるかに一般的なエラーの原因であるためです)、それはすべてのフィールド宣言をコメントアウトするように見えます-パブリック宣言だけでなく-ベストプラクティスになるでしょう。
私がためらうのは、コードで他の誰もそれをやったことがないということです。何故なの?私が知らないクラスフィールドを宣言することに利点はありますか?または、PHPの構成を何らかの方法で変更してフィールド宣言の動作を変更し、実際のフィールド宣言を使用し、「未定義のプロパティ」警告の恩恵を受けることができますか?または、分析で見逃したことは他にありますか?
TRUE === $variable
誤って割り当てる代わりの比較から自分を防ぐために。