在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”,但如果我想访问Base class Function show,
它似乎不像在c ++中完成的那样工作
obj.a::show();
答案 0 :(得分:4)
由于您覆盖了子级中的$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