php中__的含义是什么?

时间:2011-07-25 05:24:42

标签: php naming-conventions

我看到一些ppl写代码如下:

他们在变量的命名中使用__:

   public static function getInstance(){
        if(self::$__instance == NULL) self::$__instance = new SCFormatter();
        return self::$__instance;
    }

不仅是变量,还有功能:

   private function __clone(){}

php编码器使用“__”作为前缀是否有任何特殊含义。谢谢。

4 个答案:

答案 0 :(得分:8)

__中的{p> PHP适用于__get__set__clone_

历史上PHP 4变量或函数之前意味着它是私有的,因为PHP中没有私有,公共或受保护的方法。

它不仅适用于Python。例如,在_中,函数和变量的__前缀用于相同的目的。

我建议避免将函数命名为_ (双下划线),因为PHP开发人员可以在下一版本的语言中添加相同的魔术函数,因此会破坏你的码。你可以使用一个下划线 - 它并不危险,因为它不会影响语言功能。 虽然有可能,但请注意,不建议使用{{1}}作为属性/方法名称前缀,因为它不符合当今大多数编码标准。

答案 1 :(得分:7)

没有特殊的句法意义。但是,PHP团队不鼓励高度在名称的开头使用__,因为您可能会破坏未来的核心PHP功能。

PHP尝试使用__为核心名称添加前缀,这样它们就不会干扰您的姓名。例如,有__construct()方法,__sleep()方法,__wakeup()方法等。他们没有将它们称为construct()sleep()和{{ 1}}因为它们可能会干扰你自己的名字。

这是一般做法。例如,在Linux内核中也是如此。系统函数以wakeup()为前缀,因此它们不会干扰您的命名。如果您开始使用__为自己的名称添加前缀,那么您将开始干扰他们的命名,这将破坏系统功能,或者将来很可能是您的应用程序,当您最不期望它

如果PHP团队以某种方式决定在名为__的每个类中创建一个静态变量,那么所有脚本都会突然开始破坏,你不会知道原因。

引用Magic Methods的PHP手册页中的注意事项:

  

PHP将所有以$__instance开头的函数名称保留为神奇的。除非您需要一些记录的魔术功能,否则建议您不要在PHP中使用带有__的函数名称。

关于__clone() - 它是一个PHP功能,进一步证明用__为自己的名字加前缀可能会让人感到困惑。

答案 2 :(得分:3)

所有PHP Magic methods都以双下划线开头。这包括__clone()。虽然它不是由PHP强制执行的,但是不鼓励以双下划线开头命名自己的方法,因为这些名称可能会与未来的PHP魔术方法发生冲突。

答案 3 :(得分:1)

它们通常用于表示私有变量。基本上变量和方法不能具有相同的名称,因此它可以提供没有冲突名称的私有变量。如果你走那条路,我会用一个下划线。

另外正如其他地方提到的php有魔术方法。