在PHP中显式声明属性是否重要?

som*_*as1 8 php

我已经按照教程在PHP中创建了一个简单的博客编写应用程序,并修改了本教程中的类,以便它们具有其他功能.修改这个非常简单的骨骼应用程序让我更好地理解PHP的工作方式,但是我遇到了一个有趣的情况.

我项目中的一个类有大约六个类属性,如public $id, public $author, public $post.这些属性是在这个类的开头声明的,但是我发现如果删除除了其中一个属性之外的所有属性,应用程序仍然可以正常运行.

public $datePosted如果此类仍然将变量分配给此属性,则从类的开头删除属性声明是错误的,如下所示:$this->datePosted = $someVariableName;

nic*_*ckf 13

如果您尝试访问尚未声明的类属性,PHP将发出通知:

class Foo { }

var $fu = new Foo();
echo $fu->baz;
Run Code Online (Sandbox Code Playgroud)

Notice: Undefined property: Foo::$baz in blah.php on line 4

如果你设置一个值first($fu->baz = 'blah')然后它不会抱怨,但这不是一个很好的情况.

你绝对应该声明你所有的类变量(除非你想要用魔术方法获得一些乐趣)......


Eve*_*oob 8

对于阅读代码的人来说,更清楚的是成员已被明确定义为公开而不是仅仅默认为成员,因为您尚未将其指定为公共成员.

还有,$this->$datePosted错了,它应该是这样的:

$this->datePosted = $someVariable;
Run Code Online (Sandbox Code Playgroud)

这可能是您遇到错误的原因.


bri*_*vis 5

关于它如何处理类成员定义,PHP真的很松散.从技术上讲,您不必声明它们.但是你应该这样做有两个重要原因:

  • 拥有智能IDE的人(Eclipse,Aptana,Zend Studio)如果能够在使用您的课程时利用他们的编辑器智能代码(自动完成),他们一定会喜欢.此功能确实有助于防止涉及错别字的错误.如果您没有声明字段,则IDE无法确定类的字段.

  • 如果他们看到缺少正确定义的字段,那么刚刚完成使用编译语言(C++)的人可能会向你发送一个杀手.声明它们只是一种好习惯.没有理由不这样做.