带有下划线的受保护属性

时间:2012-08-17 21:50:46

标签: php coding-style naming-conventions standards

像:

public
  $foo        = null,
  $bar        = 10;

protected

  $_stuff     = null,
  $_moreStuff = 5;

很多人似乎都是这样做的。为什么呢?

不是这个不一致的命名(就像一些PHP函数是:))?

5 个答案:

答案 0 :(得分:11)

这是php5之前的一个旧约定。

Php4只有公众可见度,不知何故,人们希望能够判断一个属性是公共的还是私有的(方法相同)。下划线前缀表示私有成员或方法,不应从外部使用。

虽然严格来说,php5是不必要的,你可以明确地标记一个类成员的可见性,但这个约定仍然很常见。用户认为这样可以更轻松地查找代码,因为您可以立即查看是否也可以从外部调用该功能。这取决于个人偏好,或者是给定项目的编码风格。

答案 1 :(得分:9)

这真的归结为一件事:个人偏好。

我个人也是使用该命名约定的人。使用下划线为protectedprivate添加任何内容,无论是变量还是函数,都可以让我和我经常使用的任何其他程序员都知道该变量是全局的,并且无法在外部访问当前的类/上下文。

有助于澄清用例的一个例子是类方法:

class Example {
    public function firstFunction() {
        // do stuff
    }

    protected function _secondFunction() {
        // do more stuff
    }
}

当我编写使用类Example的代码,或者在类本身内部工作时,如果我看到_secondFunction(),我会立即知道它不是公共函数,因为启动{ {1}}因此无法在课堂外访问;无需去找实际的函数声明并查看修饰符。另一方面,我会知道_是公开的,因为它不是以一个开头的。

答案 2 :(得分:3)

下划线表示变量具有一些特殊属性(预定义,可以从组织更改为组织或程序员更改为程序员)。传统上它意味着某些东西不公开。甚至函数有时也被写成:

protected function _myProtectedFunction(){}

但是请注意,PHP保留所有以__(两个下划线)开头的函数名称都是神奇的,建议你不要在PHP中使用带__的函数名,除非你想要一些记录的魔法功能。

答案 3 :(得分:1)

作为比较,Python没有设计私有/公共,并使用下划线来传达区别。参见PEP 8的这一部分:

http://www.python.org/dev/peps/pep-0008/#designing-for-inheritance

所以它不一定只是只是一个旧的PHP5之前的惯例 - 人们可能出于与Python相同的原因故意这样做。

答案 4 :(得分:-2)

这绝对只​​是个人偏好。他们可能会这样做,因为$ _GET和$ _SESSION已经像PHP一样完成了。