繁体   English   中英

php静态魔法变量集函数

[英]php static magic variable set function

我有一些我正在使用的代码,这是由我之前的那个人编写的,我试图查看它并了解系统以及它是如何工作的。 我也是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;
    }
}

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

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

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

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

如果您不确定这些是如何工作的,请查看静态属性的文档。

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

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

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

PHP手册有关于使用下划线命名变量(和其他符号)的说法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM