有没有办法直接在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 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |