php类里面为什么可以用static::var来访问const变量?

<?php
 ini_set('display_errors',true);
 error_reporting(E_ALL);
 class A{
     const HEHE="hello";
     function show(){
         echo static::HEHE;
     }
 }
 
 $a=new A();
 $a->show();

正常输出 hello,没有报错
php版本为5.5.9
之所以发现这个,是因为Zend框架里就是这么用的。。

阅读 4.1k
2 个回答

这里的static是php面向对象的延迟绑定功能。

<?php

class A {
    const HH = "hello";
    function show()
    {
        echo static::HH, PHP_EOL;
    }
}

class B extends A {
    const HH = "world";
}


(new A)->show();
(new B)->show();

上面代码中,B继承了A。执行一下看看结果:

$ php test.php
hello
world

关于延迟绑定相关内容,可以参考官方文档 Late Static Bindings

可能是因为只读吧

推荐问题