php静态魔法变量集函数

时间:2011-01-19 20:03:22

标签: php static

我有一些我正在使用的代码,这是由我之前的那个人编写的,我试图查看它并了解系统以及它是如何工作的。我也是PHP的新手,所以对于那些愿意并且能够提供的人,我有几个问题。

相关代码的基本细分如下:

$__CMS_CONN__ = new PDO(DB_DSN, DB_USER, DB_PASS);
Record::connection($__CMS_CONN__);

第一个问题,我知道双下划线使它变得神奇,但是我无法确切地找到任何延伸到它的属性,除了它表现得像一个常数之类的。那是什么意思呢?

class Record
{
    public static $__CONN__ = false;
    final public static function connection($connection)
    {
        self::$__CONN__ = $connection;
    }
}

其次,这两件事情在一起。它们分别位于不同的文件中。根据我的阅读,静态变量可以像静态函数一样被引用,所以你不能直接调用变量并直接设置它而不是使用函数吗?

我感觉它比我意识到的更多,但我需要从某个地方开始。

4 个答案:

答案 0 :(得分:4)

这不是一个神奇的变量。写这篇文章的人不应该对这样的变量名称使用双下划线,因为它会引起混淆。

这只是一个类的静态属性。这意味着它在该类的实例之间共享(在同一个php请求中)。

如果您不确定这些文档是如何工作的,请查看static properties的文档。

答案 1 :(得分:2)

有几个使用此命名方式的预定义“magic constants”。但是,我不认为下划线意味着什么特别的(就语言而言);即,像这样定义你自己的变量不会赋予它任何神奇的属性。它可能是之前程序员命名约定的一部分,如果是这样,那可能是不明智的。

在许多情况下,通过函数设置属性可以使“客户端”代码对类的实现中的更改更具弹性。所有实现细节都可以隐藏在方法中(称为“setter”)。然而,对于这是否是一个好主意存在强烈的感觉(我,对于其中一个,不是一个大粉丝)。

答案 2 :(得分:1)

  1. 两个下划线不会产生变量魔法。
  2. 使用getter / setter比直接访问类属性更好。

答案 3 :(得分:1)

PHP手册可以在naming variables (and other symbols) with underscores上说明:

  

PHP将所有以__开头的符号保留为神奇的。除非您想使用记录的神奇功能,否则建议您不要在PHP中创建以__开头的符号。

特别注意使用“储备”和“记录”一词。它们意味着不应将双下划线用于用户定义的符号,因为它可能导致未来的冲突,并且除非手册中明确提到符号是魔术,否则它是平凡的。