[英]Is there any way to access Base Class Property via Derived Class object directly in 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;
}
};
$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 ++示例調用使用范圍解析運算符::
您可能正在尋找類/靜態屬性 :
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.