我看到一些ppl写代码如下:
他们在变量的命名中使用__:
public static function getInstance(){
if(self::$__instance == NULL) self::$__instance = new SCFormatter();
return self::$__instance;
}
不仅是变量,还有功能:
private function __clone(){}
php编码器使用“__”作为前缀是否有任何特殊含义。谢谢。
答案 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有魔术方法。