[英]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”)。 然而,对于这是否是一个好主意存在强烈的感觉(我,对于其中一个,不是一个大粉丝)。
PHP手册有关于使用下划线命名变量(和其他符号)的说法:
PHP将所有以__开头的符号保留为神奇的。 除非您想使用记录的神奇功能,否则建议您不要在PHP中创建以__开头的符号。
特别注意使用“储备”和“记录”这两个词。 它们意味着不应将双下划线用于用户定义的符号,因为它可能导致未来的冲突,并且除非手册中明确提到符号是魔术,否则它是平凡的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.