微麦PHP 2019-06-27
首先这个问题没什么好争论的。类似这种关于代码规范的问题,目前我的观点是:
跟随你面对的团队,跟随你面对的代码块
最近两次被别人问到php私有变量加下划线的问题,由于我开始也是这么做的,但是最后还是没用下划线了。最后想想还是把自己的想法说下吧。
首先: 大家都知道在面向对象编程中对修改封闭,对扩展开放的原则(所以不对属性public,违反原则)。
但是我们的代码总是事与愿违,在某些场景中我们需要对外可修改我们的属性。这里就会经常见到一些getXXX
和setXXX
之类的成员方法。
然而: 对于getXXX
和setXXX
,我更习惯于魔术方法__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; } }