当我没有将成员变量声明为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”,它将运行。
答案 0 :(得分:2)
“类属性必须定义为公共,私有或受保护。”
...和...
“类方法可能被定义为public,private或protected。声明没有任何显式可见性关键字的方法被定义为public。”
[强调我的]
我不确定为什么会这样,但这只是指定语言的方式。
答案 1 :(得分:1)
在成员变量之前,您需要一个关键字。该关键字曾是var
:
class Foo {
var $bar = null;
function baz() { }
}
var
属于function
属性的方法。
var
已被弃用,但有利于显式可见性声明。因此,public
,protected
,private
属于function
属性,现在是方法。方法另外也会获取可见性声明。
逻辑上,他们可以选择public var $bar
作为属性的语法,但改为使用简单的public $bar
。