默认情况下声明为私有的属性


Are properties declared as private by default?

我有属性$value,根据我是否将private添加到变量声明中,给出不同的错误消息。

Class Node{
        $value = NULL;
        public function __construct($value){
                $this->value = $value;
        }
}
$node = new Node('hello');
echo $node->value;

PHP解析错误:语法错误,意想不到的T_VARIABLE,期望T_FUNCTION在/home/ubuntu/new. PHP第4行

然而,如果我用private $value = NULL;代替$value = NULL;,我得到一个不同的错误信息:

PHP致命错误:无法访问私有属性Node::$value在/home/ubuntu/new. PHP的第11行

我认为省略术语私有会自动使属性私有?

编辑

我现在明白了属性在默认情况下是公共的。为什么我得到一个错误时,声明属性$value没有public前置到它?

echo $node->value;

放置类代码而不调用,你会得到相同的错误。

你只是出现了语法错误:

 $value = NULL;

替换为:

var $value = NULL;

更新

但这是错误的解决方案,只是为了显示你的问题在哪里。总是设置变量可见性之一:

    私人
  • 公共

在PHP默认可见性是公共的。我猜你认为它是私有的,因为它是Java和其他面向对象语言的默认值。

//编辑

我的小错误,变量具有强制性可见性,关于public的默认部分是关于方法的。我建议总是指定你需要的级别,以避免混淆。

var关键字是public的别名(出于兼容性原因保留了它)