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框架里就是这么用的。。

阅读 3.3k
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

可能是因为只读吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏