我的一位同事最近告诉我,PSR-2编码标准说你不允许使用"_"字符来表明变量是私有的还是受保护的.
他引用了http://www.php-fig.org/psr/psr-2/的 "4.2属性"部分
必须在所有属性上声明可见性.
var关键字绝不能用于声明属性.
每个声明不得超过一个属性.
属性名称不应以单个下划线为前缀,以指示受保护或私有可见性.
当我听到这个时,我感到非常愤怒,因为我是私人和受保护的vars上_前缀的忠实粉丝,我无法相信社区会接受这样的标准.
我对此基于"SHOULD NOT"关键字的解释是,在声明类的属性时必须使用范围关键字,并且建议您不要使用_字符,但仍然允许它仍然是PSR-2如果您选择使用此投诉.
虽然我不同意这一点,并建议每个人使用下划线为私有和受保护的变量加前缀,但我怀疑这背后的原因是为了防止人们忽略scope关键字(Public,Protected,Private)并仅依赖命名约定.这使得因为,因为我们都知道范围变量PHP使一切都公开.
http://www.ietf.org/rfc/rfc2119.txt
总结一个问题:PSR-2类上的私有和受保护变量上的"_"前缀是否兼容?
编辑:此外,我不是在寻找个人偏好辩论,我只是想知道_前缀的使用是否符合PSR-2标准.
我不认为"我更喜欢它"符合特定情况,因为有正当理由存在,因为理由适用于您的人,而不是代码库或项目.
我可以想到其他一些证明不应该这样做的例子:
项目取决于某些第三方工具,框架,等等......依赖于名称来识别可见性.
类方法名称需要模仿来自使用此类约定的其他项目的那些(例如,因为它是来自另一种语言的端口).
项目在PHP/5之前启动.重命名会破坏向后兼容性.
因此,它并没有严格禁止,但显然不鼓励; 可能,因为它提供了可以在进一步重构的过程中获得的冗余信息,甚至可能是错误的:
// r12345 Expose HTML escaping
public function _escapeHtml(){
}
Run Code Online (Sandbox Code Playgroud)