如果一个变量在没有它的情况下工作,那么在一个类顶部声明变量的目的是什么?
class Testclass
{
public $testvar = "default value";
public function setTestvar($testvar) {
$this->testvar = $testvar;
}
public function getTestvar() {
return $this->testvar;
}
}
与之相比:
class Testclass
{
public function setTestvar($testvar) {
$this->testvar = $testvar;
}
public function getTestvar() {
return $this->testvar;
}
}
答案 0 :(得分:2)
两种变体都是正确的,但在初始化之前获取testvar
时缺少第二种变体。
如果您在使用$test->getTestvar();
进行设置之前致电$test->setTestval('bla bla');
,则会收到警告,例如:
注意:未定义的属性:Testclass :: $ testvar
第二个变体也缺少属性可见性部分(即私有,受保护)。 More about visibility
在方法之上声明类属性是一种很好的做法,它取自严格的oop语言,如java。
答案 1 :(得分:1)
在PHP中,包含声明没有功能目的。您似乎已经阅读了文档并且100%正确。
然而有一例。如果我们在设置变量之前调用 getter
,我们将获得undefined variable
例外。
现在让我们考虑一下。
假设我是一名程序员,专门研究c ++和java。我是这些语言的专家(所以我很快就拿起PHP),而你的公司只是聘请我来帮助你处理你正在使用的Web应用程序。我看一下这个对象,并且不知道发生了什么。
真正归结为PHP是我所知道的最奇怪的语言之一。你偶然发现了PHP所做的许多奇怪的事情之一。这不会是你的最后一次。对象是模板;它们是程序员可以出于各种原因使用的代码片段。在制作对象时我们可以做的信息和格式越多,其他程序员就越有效地使用它。 与我们格式化代码的原因完全相同。
<强> TL; DR 强>
没有理由,除了文档,易于阅读和避免未声明的变量。
提出了另一个重要问题
在全局上下文中声明变量允许您设置属性可见性。公共或私人。因为你有getter和setter我假设你的属性是私有的。所以你需要声明它。