当我不将成员变量声明为public或private时,为什么会出现语法错误?

时间:2011-07-28 22:35:21

标签: php

当我没有将成员变量声明为public或private时,我收到语法错误。但是,如果我不将成员函数声明为public或private,则默认为public。

// Class
class Building {
    // Object variables/properties
    private $number_of_floors = 5; // These buildings have 5 floors
    private $color;

    // Class constructor
    public function __construct($paint) {
        $this->color = $paint;
    }

    public function describe() {
        printf('This building has %d floors. It is %s in color.', 
            $this->number_of_floors, 
            $this->color
        );
    }
}

对于上面的代码,尝试从成员变量中删除“private”,它将不会运行,但如果从成员函数中删除“public”,它将运行。

2 个答案:

答案 0 :(得分:2)

来自The PHP online manual

  

“类属性必须定义为公共,私有或受保护。”

...和...

  

“类方法可能被定义为public,private或protected。声明没有任何显式可见性关键字的方法被定义为public。”

[强调我的]

我不确定为什么会这样,但这只是指定语言的方式。

答案 1 :(得分:1)

在成员变量之前,您需要一个关键字。该关键字曾是var

class Foo {

    var $bar = null;

    function baz() { }

}

var属于function属性的方法。

var已被弃用,但有利于显式可见性声明。因此,publicprotectedprivate属于function属性,现在是方法。方法另外也会获取可见性声明。

逻辑上,他们可以选择public var $bar作为属性的语法,但改为使用简单的public $bar