考虑下面的代码,由于我过去几次实际犯的普通编程错误,故意将设置器破坏了:
<?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注意:未定义的属性:第13行的/var/www/test.php中的TestClass :: $ testField
有了声明,就没有警告。
也许我缺少了一些东西,但是我知道在PHP中声明类字段的原因只有两个:首先,声明充当文档,其次,没有声明,一个人不能使用private
and protected
访问修饰符,这是可以说很有用。由于后一种说法不适用于公共字段-分配给对象的未声明字段会使它成为公共字段-在我看来,我至少应该注释掉所有公共字段声明。注释将提供完全相同的文档价值,但是如果尝试读取未初始化的字段,我将从警告中受益。
但是,进一步考虑,到此止步似乎没有任何意义。因为根据我的经验,尝试读取未初始化的字段是比尝试不正确地读取或修改私有或受保护的字段更常见的错误原因(在我短暂的编程生涯中,我已经做过前几次,但从未),在我看来,注释掉所有字段声明(而不仅仅是公共声明)将是最佳做法。
让我犹豫的是,我从未见过有人在他们的代码中这样做。为什么不?声明我不知道的类字段有好处吗?还是可以通过某种方式修改PHP的配置以更改字段声明的行为,以便可以使用真实的字段声明,并且仍然受益于“未定义的属性”警告?还是我在分析中遗漏的所有其他内容?
TRUE === $variable
以防止自己意外分配而不是进行比较。