在查看各种PHP库时,我注意到很多人选择使用单个下划线为某些类方法添加前缀,例如
public function _foo()
...代替...
public function foo()
我意识到这最终归结为个人偏好,但我想知道是否有人对这种习惯的来源有所了解.
我的想法是,它可能是从PHP 4继承的,在类方法可以被标记为受保护或私有之前,作为暗示"不要从类外调用此方法"的一种方式.然而,我也想到它可能起源于我不熟悉的某个地方(一种语言),或者背后可能有很好的推理,我会从中获益.
任何想法,见解和/或意见将不胜感激.
这是面向对象PHP(PHP 4)的旧时代.面向对象的实现非常糟糕,并没有包括私有方法之类的东西.为了弥补这一点,PHP开发人员开始使用下划线表示私有的方法.在一些较旧的课程中,你会看到/**private*/ __foo() {
给它一些额外的重量.
我从来没有听说开发人员用下划线填充所有方法,所以我无法解释导致这种情况的原因.
我相信现在这类PHP约定的最权威来源是PSR-2:编码风格指南,因为Zend框架是PSR的一部分:
属性名称不应以单个下划线为前缀,以指示受保护或私有可见性.
现在,在2013年,这是PSR-2编码指南的"正式"坏风格:
属性名称不应以单个下划线为前缀,以表示受保护或私有可见性
资料来源:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
我坚决反对使用下划线为私有/受保护方法添加前缀,因为您可以使用private/protected关键字,IDE会为您标记它.
我仍然是,但是,我找到了一个可以成为一种好习惯的原因.想象一下,你有公共方法addFoo()
,在那个方法里面你有一些与其他方法相同的任务部分addFooWhenBar()
,addFooWhenBaz()
......现在,这个常用方法的最佳名称是addFoo()
,但它已经被采用了,所以你必须想出一些丑陋的名字喜欢addFooInternal()
或者addFooCommon()
......但_addFoo()
私人方法看起来最好.
主要下划线通常用于私有属性和方法.这不是我通常使用的技术,但在一些程序员中仍然很受欢迎.
我在PHP 5类中使用了一个前导下划线,我为私有方法编写.这对开发人员来说是一个小的视觉提示,即特定的类成员是私有的.当使用区分公共和私有成员的IDE时,这种类型的提示不是很有用.我从C#天开始接收它.旧习惯......
我相信你的原始假设是正确的,我发现一些语言的常见做法是将下划线加到方法/成员等前面,这些方法/成员等意味着对"对象"保密.只是一种直观的方式来说,虽然你可以,你不应该称之为!
我一直在寻找相同的答案,我做了一些研究,但我发现php框架建议使用不同的样式:
代码点火器
官方手册的编码样式部分鼓励这样做:
私有方法和变量
仅在内部访问的方法和变量(例如,公用方法用于代码抽象的实用工具和帮助器函数)应带有下划线前缀。
public function convert_text() private function _convert_text()
其他框架也一样,例如
Cakephp:
做同样的事情:
成员可见度
对方法和变量使用PHP5的private和protected关键字。此外,非公共方法或变量名称以单个下划线(_)开头。例:
class A { protected $_iAmAProtectedVariable; protected function _iAmAProtectedMethod() { /* ... */ } private $_iAmAPrivateVariable; private function _iAmAPrivateMethod() { /* ... */ } }
并且
梨
做同样的事情:
私人班级成员前面带有单个下划线。例如:
$_status _sort() _initTree()
而
Drupal
代码风格对此特别警告:
受保护的或私有的属性和方法不应使用下划线前缀。
交响乐
另一方面,声明:
Symfony遵循PSR-0,PSR-1,PSR-2和PSR-4文档中定义的标准。