我已经按照教程在PHP中创建了一个简单的博客编写应用程序,并修改了本教程中的类,以便它们具有其他功能。修改这个非常简单的骨骼应用程序让我更好地理解PHP的工作方式,但是我遇到了一个有趣的情况。
我项目中的一个类有大约六个类属性,例如public $id, public $author, public $post
。这些属性是在这个类的开头声明的,但是我发现如果删除除了其中一个属性之外的所有属性,应用程序仍然可以正常运行。
如果此类仍然将变量分配给此属性,则从类的开头删除public $datePosted
之类的属性声明是错误的:$this->datePosted = $someVariableName;
答案 0 :(得分:13)
如果您尝试访问尚未声明的类属性,PHP将发出通知:
class Foo { }
var $fu = new Foo();
echo $fu->baz;
Notice: Undefined property: Foo::$baz in blah.php on line 4
如果您先设置一个值($fu->baz = 'blah'
),那么它就不会抱怨,但这不是一个好的情况。
你绝对应该声明你所有的类变量(除非你想要对magic methods感兴趣)...
答案 1 :(得分:8)
对于阅读代码的人来说,更明确的是会员被明确定义为公开而不是仅仅因为您没有将其指定为公共成员而默认为公共成员。
另外,$this->$datePosted
错了,应该是这样的:
$this->datePosted = $someVariable;
这可能是您遇到错误的原因。
答案 2 :(得分:5)
PHP对于如何处理类成员定义非常松散。您技术上不必声明它们。但是应该,原因有两个:
拥有智能IDE的人(Eclipse,Aptana,Zend Studio)如果能够在使用您的课程时利用他们的编辑器智能代码(自动完成),他们一定会喜欢。此功能确实有助于防止涉及错别字的错误。如果您没有声明字段,则IDE无法确定类的字段。
如果他们看到缺少正确定义的字段,那么刚刚完成使用编译语言(C ++)的人可能会向您发送一个杀手。声明它们只是一种好习惯。没有理由不这样做。
答案 3 :(得分:2)
此外,如果您删除声明并且代码在写入之前读取此变量,则会出现类似
的错误PHP注意:未定义的属性: 在C:\ temp \ test.php上的一个:: $不存在 第8行
注意:未定义的属性: 在C:\ temp \ test.php上的一个:: $不存在 第8行