2009-09-16 45 views
7

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

我的项目中的一个类有大约六个类属性,如public $id, public $author, public $post。这些属性是在这个类的开始处声明的,但是我发现如果我删除了其中一个属性,那么应用程序仍然可以正常工作。

这是错误的,从一个类的开头删除属性声明,如public $datePosted如果该类仍然规定变量此属性是这样的:$this->datePosted = $someVariableName;

回答

12

如果哟ü尝试以访问尚未声明的类属性,PHP会发出通知:如果先($fu->baz = 'blah')设定的值

class Foo { } 

var $fu = new Foo(); 
echo $fu->baz; 

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

然后它赢得抱怨,但这不是一个好的情况。

您一定要申报所有的类变量(当然,除非你想有一些有趣的magic methods)...

8

这对任何人阅读你的代码更清晰的成员一直明确地定义为公共而不仅仅是违约,因为你没有将它们分配为公众成员。

此外,$this->$datePosted是错误的,它应该是这样的:

$this->datePosted = $someVariable; 

这可能是为什么你正在经历一个错误。

+0

感谢您的回答。 $ this - > $ datePosted是Daok修正的错字。这在我的代码中实际上不是问题。 – somas1 2009-09-16 14:59:52

2

此外,如果您删除的声明和代码之前书面方式来读取这个变量,你必须像

PHP发现错误:未定义的属性:用C A :: $所没有的:\未定义的属性: A ::在C $所没有的:在 线8

通知TEMP \ test.php的\ TEMP \ test.php的上 线8

5

PHP是真的松动关于如何处理类成员的定义。您在技术上不必声明它们。但是你应该,有两个重要原因:

  • 人与智能的IDE(Eclipse中,Aptana或Zend Studio的)会很喜欢,如果他们可以利用他们的编辑器的代码智能感知(自动完成)与工作时你的课程。此功能确实有助于防止涉及错别字的错误。如果你没有声明你的字段,IDE没有真正的方法来确定类的字段。

  • 有人刚刚完成了一个编译语言(C++)工作后,你可能会发送一个杀手,如果他们看到缺乏正确定义的字段。宣布它们只是一个好习惯。没有理由不这样做。