在类中声明变量的目的是什么


What is the purpose of declaring variables in a class

如果变量在没有变量的情况下工作,那么在类的顶部声明变量的目的是什么?

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; 
    }
}

两种变体都是正确的,但在初始化之前获取testvar时缺少第二个变体。

如果您在使用 $test->setTestval('bla bla'); 设置之前调用$test->getTestvar();,您将收到一条警告,如下所示:

注意:未定义的属性:测试类::$testvar

第二种变体也缺乏属性可见性部分(即私有、受保护(。有关可见性的更多信息。

上述方法的类属性声明是一个很好的做法,它取自严格的 oop 语言,如 java。

在 PHP 中,包含声明没有功能目的。 您似乎已经阅读了文档并且您是 100% 正确的。

然而,有一个案例。 如果我们 在设置变量之前调用getter,我们将得到一个undefined variable异常。

现在让我们考虑一下。

假设我是一名程序员,专门研究 c++ 和 java。 我是这些语言的专家(所以我很快就学会了PHP(,你们的公司刚刚聘请我来帮助开发你正在开发的Web应用程序。 我看了看这个物体,不知道发生了什么。

归根结底,PHP是我所知道的最奇怪的语言之一。 您偶然发现了PHP所做的许多奇怪事情之一。 这不会是你的最后一次。 对象是模板;它们是程序员可以出于各种原因使用的代码片段。 我们在制作对象时可以做的信息和格式化越多,其他程序员就越能有效地使用它。 这与我们格式化代码的原因完全相同。

博士

没有理由,除了文档,易于阅读和避免未声明的变量。

编辑

提出了另一个重要问题

在全局上下文中声明变量允许您设置属性可见性。 公共或私人。 因为你有getters和setter,我假设你的财产是私有的。 所以你需要声明这一点。