Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php静态魔术变量集函数_Php_Static - Fatal编程技术网

php静态魔术变量集函数

php静态魔术变量集函数,php,static,Php,Static,我有一些我正在使用的代码,这些代码是我之前的那个人写的,我试着看一下,并对系统和它是如何工作的有一个感觉。我对PHP也相当陌生,所以我有几个问题要问那些愿意并且能够提供的人 有关守则的基本分类如下: $__CMS_CONN__ = new PDO(DB_DSN, DB_USER, DB_PASS); Record::connection($__CMS_CONN__); 第一个问题,我知道双下划线让它变魔术了,但我还没能找到它到底扩展了什么属性,除此之外,它的行为就像一个常量,有点像。那是什么意

我有一些我正在使用的代码,这些代码是我之前的那个人写的,我试着看一下,并对系统和它是如何工作的有一个感觉。我对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;
    }
}
第二,这两部分是结合在一起的。它们分别在不同的文件中。从我读到的内容来看,静态变量可以像静态函数一样被引用,所以你不能直接调用变量并设置它,而不是使用函数吗


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

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


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

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

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

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

  • 两个下划线不能使变量变魔术
  • 使用getter/setter比直接访问类属性更好

  • PHP手册中有这样一句话:

    PHP将所有以_uu开头的符号保留为神奇符号。建议您不要在PHP中创建以_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uuu_uu_uu_uu_uu_uu_


    特别注意使用“保留”和“记录”这两个词。他们的意思是,用户定义的符号不应该使用双下划线,因为它可能会导致将来的冲突,并且除非在手册中明确提到该符号是神奇的,否则它是平凡的。

    标识符中的下划线在PHP中没有特殊意义。但是它们通常意味着表明属性应该被认为是内部的。getter/setter不是最佳实践。PHP开发人员刚刚发现了这个习惯用法,更晚的是,虽然我同意实现应该是抽象的,但当需要访问属性时,直接访问它们仍然不是最好的。我稍微改变了我的说法。好吧,所以没有把你自己的东西定义为魔法,它只适用于具有该命名约定的预定义php函数。我想现在我知道我可以离开他们了,改变他们是一种痛苦。