当前位置:  开发笔记 > 编程语言 > 正文

与PHP类方法中的主要下划线有什么关系?

如何解决《与PHP类方法中的主要下划线有什么关系?》经验,为你挑选了8个好方法。

在查看各种PHP库时,我注意到很多人选择使用单个下划线为某些类方法添加前缀,例如

public function _foo()

...代替...

public function foo()

我意识到这最终归结为个人偏好,但我想知道是否有人对这种习惯的来源有所了解.

我的想法是,它可能是从PHP 4继承的,在类方法可以被标记为受保护或私有之前,作为暗示"不要从类外调用此方法"的一种方式.然而,我也想到它可能起源于我不熟悉的某个地方(一种语言),或者背后可能有很好的推理,我会从中获益.

任何想法,见解和/或意见将不胜感激.



1> Jeremy DeGro..:

这是面向对象PHP(PHP 4)的旧时代.面向对象的实现非常糟糕,并没有包括私有方法之类的东西.为了弥补这一点,PHP开发人员开始使用下划线表示私有的方法.在一些较旧的课程中,你会看到/**private*/ __foo() {给它一些额外的重量.

我从来没有听说开发人员用下划线填充所有方法,所以我无法解释导致这种情况的原因.


我在我的控制器中的方法之前放置一个下划线,这些方法是类的私有,并且在路由中未使用.因为我使用自己的框架,所以这增加了安全性,因为我强制执行路由中控制器名称没有前导下划线的策略.但是每个控制器很少超过1-2个方法.
按照惯例,使用perl,以下划线开头的方法是私有的.但这只是一个惯例.事实上,这些方法仍然可以在课外进行.

2> joedevon..:

我相信现在这类PHP约定的最权威来源是PSR-2:编码风格指南,因为Zend框架是PSR的一部分:

属性名称不应以单个下划线为前缀,以指示受保护或私有可见性.


我认为,使用命名约定并不是爱语言的理由.
当我第一次读到这篇文章时,我理解了这样的理由,你可以查看一种方法,并知道它是公开的还是私人的.如果它是一个要求而不是一个惯例,那将会更有意义.因为如果一个团队中的一个程序员在不需要的地方添加一个下划线,或者使用下划线将公共一个下划线添加,那么你最终会感到很困惑.事实证明,这是来自PHP4,正如Jeremy指出的那样,&#ZF基于PEAR大会的惯例.梨已经删除它,我相信#ZF也会效仿.

3> Sliq..:

现在,在2013年,这是PSR-2编码指南的"正式"坏风格:

属性名称不应以单个下划线为前缀,以表示受保护或私有可见性

资料来源:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md


根据"PSR-2" - >"不应该"意味着"不推荐"不被禁止在某些情况下这意味着可以接受.PSR Doc - > http://www.ietf.org/rfc/rfc2119.txt

4> umpirsky..:

我坚决反对使用下划线为私有/受保护方法添加前缀,因为您可以使用private/protected关键字,IDE会为您标记它.

我仍然是,但是,我找到了一个可以成为一种好习惯的原因.想象一下,你有公共方法addFoo(),在那个方法里面你有一些与其他方法相同的任务部分addFooWhenBar(),addFooWhenBaz()......现在,这个常用方法的最佳名称是addFoo(),但它已经被采用了,所以你必须想出一些丑陋的名字喜欢addFooInternal()或者addFooCommon()......但_addFoo()私人方法看起来最好.



5> jonstjohn..:

主要下划线通常用于私有属性和方法.这不是我通常使用的技术,但在一些程序员中仍然很受欢迎.



6> GloryFish..:

我在PHP 5类中使用了一个前导下划线,我为私有方法编写.这对开发人员来说是一个小的视觉提示,即特定的类成员是私有的.当使用区分公共和私有成员的IDE时,这种类型的提示不是很有用.我从C#天开始接收它.旧习惯......



7> Quintin Robi..:

我相信你的原始假设是正确的,我发现一些语言的常见做法是将下划线加到方法/成员等前面,这些方法/成员等意味着对"对象"保密.只是一种直观的方式来说,虽然你可以,你不应该称之为!



8> m.ardito..:

我一直在寻找相同的答案,我做了一些研究,但我发现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文档中定义的标准。

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有