加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

有没有办法直接在PHP中通过Derived Class对象访问基类属性

发布时间:2020-12-13 17:16:52 所属栏目:PHP教程 来源:网络整理
导读:在 PHP中,有没有办法直接通过派生类类型的对象直接访问任何基类属性. 例如: class a { public $name="Something"; function show() { echo $this-name; }}; class b extends a { public $name="Something Else"; function show() { echo $this-name; }};$ob
在 PHP中,有没有办法直接通过派生类类型的对象直接访问任何基类属性.

例如:

class a  
{  
    public $name="Something"; 

    function show()
    {
        echo $this->name;
    }
}; 
class b extends a  
{  
     public $name="Something Else";  

     function show()
     {
         echo $this->name;
     }
};

$obj = new b();
$obj->show();

它会打印字符串“Something Else”,但如果我想访问基类功能节目,

它似乎没有像在c中完成的那样工作

obj.a::show();

解决方法

由于您在子项中覆盖$name,因此该属性将具有子项的属性值.您无法访问父值.任何其他方式都没有意义,因为属性是公共的,这意味着属性对于子(和外部)是可见的,对它的修改将改变基本值.因此,它实际上是该实例的同一属性和值.

具有相同名称的两个单独属性的唯一方法是将基本属性声明为private,将子属性声明为非私有,然后调用可以访问基本属性的方法,例如:

class Foo
{
    private $name = 'foo';

    public function show()
    {
        echo $this->name;
    }
}

class Bar extends Foo
{
    public $name = 'bar';

    public function show()
    {
        parent::show();
        echo $this->name;
    }
}

(new Bar)->show(); // prints foobar

由于您的C示例调用正在使用scope resolution operator ::,您可能正在寻找class/static properties:

class Foo
{
    static public $name = 'foo';

    public function show()
    {
        echo static::$name; // late static binding
        echo self::$name;   // static binding
    }
}

class Bar extends Foo
{
    static public $name = 'bar';

    public function show()
    {
        parent::show(); // calling parent's show()
        echo parent::$name; // calling parent's $foo
    }
}

(new Bar)->show(); // prints barfoofoo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读