繁体   English   中英

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

[英]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->getTestvar(); 在使用$test->setTestval('bla bla');设置它之前$test->setTestval('bla bla'); ,你会得到一个警告,如:

注意 :未定义的属性:Testclass :: $ testvar

第二个变体也缺少属性可见性部分(即私有,受保护)。 更多关于可见性

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

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

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

现在让我们考虑一下。

假设我是一名程序员,专门研究c ++和java。 我是这些语言的专家(所以我很快就拿起PHP),而你的公司只是聘请我来帮助你处理你正在使用的Web应用程序。 我看一下这个对象,并且不知道发生了什么。

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

TL; DR

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

编辑

提出了另一个重要问题

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM