在类中,我们可以通过self访问本类或父类中的静态属性/静态方法,可以通过parent访问父类中的静态属性/静态方法。
可我们却没有关键字从父类中的方法访问子类的静态属性,这是由于父类是先于子类创建的,所以从逻辑上来讲从父类中访问子类的静态属性并不是一个好的选择。
但有些时候我们不得不这样做,那么我们可以通过get_class()方法实现:
get_class()返回的是本对象名,
get_class(obj)返回的是对象obj的名,
看下面这个例子:
<?php class A { function getName() { echo get_class(); echo get_class($this); } } class B extends A { } $a = new A(); $b = new B(); $a->getName(); $b->getName();结果:AAAB
---------------------------------------------------------------
有了子类对象名,在利用eval()方法,我们就可以实现在父类方法中访问子类静态属性了:
<?php class A { function getName() { $class = get_class($this); eval('$name='.$class.'::$name;'); echo $name; } } class B extends A { public static $name = 'B'; } class C extends A { public static $name = 'C'; } $b = new B(); $c = new C(); $b->getName(); $c->getName();结果:BC
----------------------------------
如果父类中使用的是静态方法,不能使用$this,那么是不是就没办法了呢?
当然不是!
将A类改成如下
便可兼容静态方法调用
<?php class A { static function getName() { $class = get_called_class(); eval('$name='.$class.'::$name;'); echo $name; } } class B extends A { public static $name = 'B'; } class C extends A { public static $name = 'C'; } B::getName(); c::getName();结果BC
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:php父类中访问子类的静态属性-创新互联
本文网址:https://www.cdcxhl.com/article42/cdsghc.html
成都网站建设公司_创新互联,为您提供微信小程序、商城网站、面包屑导航、网站设计公司、Google、做网站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联