前言[短文]

首先这个问题没什么好争论的。类似这种关于代码规范的问题,目前我的观点是:

跟随你面对的团队,跟随你面对的代码块

最近两次被别人问到php私有变量加下划线的问题,由于我开始也是这么做的,但是最后还是没用下划线了。最后想想还是把自己的想法说下吧。

为什么我不在PHP的私有变量用下划线了?

首先: 大家都知道在面向对象编程中对修改封闭,对扩展开放的原则(所以不对属性public,违反原则)。

但是我们的代码总是事与愿违,在某些场景中我们需要对外可修改我们的属性。这里就会经常见到一些getXXXsetXXX之类的成员方法。

然而: 对于getXXXsetXXX,我更习惯于魔术方法__get__set,这两个魔术方法其实就可以运用到这个场景,因为可以统一对外暴露属性,并加以控制,防止的滥用,符合面向对象的思想。

但是: 对外暴露一个加下划线的私有属性,看起来好怪(既然私有了为啥还加下划线)。

// 像这样
(new Demo)->_XXX

所以: 我会在魔术方法__get__set里面统一加下划线,这样这个私有属性就可以不带下划线访问了。


class Demo
{
public function __set($name = '', $value = '')
{
$argu = "_{$this->$name}";
return $this->$argu = $value;
}

public function __get($name = '')
{
$argu = "_{$this->$name}";
return $this->$name;
}
}

这样: 对外可以暴露的私有属性就没下划线了。

可是: 魔术方法__get__set里面加这个又感觉怪怪的。

结果: 所以干脆不加了。

其次: 想了想也没哪有这个硬性规定。

最后如下:


class Demo
{
public function __set($name = '', $value = '')
{
return $this->$name = $value;
}

public function __get($value = '')
{
return $this->$value;
}
}