10

像:

public
  $foo        = null,
  $bar        = 10;

protected

  $_stuff     = null,
  $_moreStuff = 5;

很多人似乎都会这样做。为什么?

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

4

5 回答 5

11

这是 php5 之前的旧惯例。

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

虽然严格来说它在 php5 中是不必要的,您可以在其中显式标记类成员的可见性,但这种约定仍然很常见。用户认为这使得浏览代码更容易,因为您可以立即查看是否也可以从外部调用该函数。这取决于个人喜好或给定项目的编码风格。

于 2012-08-17T21:54:58.877 回答
10

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

我个人也是使用该命名约定的人。protected为任何带有下划线或下划线的东西添加前缀private,无论是变量还是函数,让我自己和我经常与之合作的任何其他程序员都知道该变量是全局的,并且在当前类/上下文之外无法访问。

一个有助于阐明用例的示例是使用类方法:

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

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

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

于 2012-08-17T21:54:38.817 回答
3

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

protected function _myProtectedFunction(){}

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

于 2012-08-17T22:00:36.787 回答
1

相比之下,Python 在设计上没有私有/公共,并使用下划线来传达区别。请参阅 PEP 8 的这一部分:

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

因此,它不一定只是PHP5 之前的旧约定——人们可能出于与 Python 相同的原因故意这样做。

于 2013-12-17T18:54:05.387 回答
-2

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

于 2012-08-17T21:56:42.007 回答