簡體   English   中英

有沒有辦法直接在PHP中通過Derived Class對象訪問基類屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM