码迷,mamicode.com
首页 > Web开发 > 详细

php父类中访问子类的静态属性

时间:2016-09-26 01:11:50      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:父类 子类 静态属性

在类中,我们可以通过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

本文出自 “黑暗森林” 博客,请务必保留此出处http://mysens.blog.51cto.com/10014673/1856359

php父类中访问子类的静态属性

标签:父类 子类 静态属性

原文地址:http://mysens.blog.51cto.com/10014673/1856359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!