Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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 - Fatal编程技术网

Php 在类内获取类常量

Php 在类内获取类常量,php,Php,self::CONSTANT\u NAME和static::CONSTANT\u NAME之间有什么区别 是否仅通过静态调用常量::5.3功能?差别很大 简要说明: self::将引用使用self::编写代码的类类型 static::将引用正在其上执行使用static::的代码的实际对象的类类型 这意味着,如果我们讨论的是同一继承层次结构中的类,那么这只是一个区别。当您使用static::NAME时,它是一种称为后期静态绑定(或LSB)的功能。有关此功能的更多信息,请参阅LSB的php.net文

self::CONSTANT\u NAME
static::CONSTANT\u NAME
之间有什么区别


是否仅通过
静态调用常量::
5.3功能?

差别很大

简要说明:

self::
将引用使用self::编写代码的类类型

static::
将引用正在其上执行使用static::的代码的实际对象的类类型


这意味着,如果我们讨论的是同一继承层次结构中的类,那么这只是一个区别。

当您使用static::NAME时,它是一种称为后期静态绑定(或LSB)的功能。有关此功能的更多信息,请参阅LSB的php.net文档页面:

此用例就是一个例子:

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>

而且,正如您所料,它输出“B”

这与后期静态绑定有关。但是,甚至可以重写类常量吗?如果不是的话,我相信这是无关紧要的。
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Here comes Late Static Bindings
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>