2013-06-09 2 views
4

в php, есть ли способ прямого доступа к любому свойству базового класса напрямую через объект производного типа класса.Есть ли способ получить доступ к базовому классу через объект Derived Class непосредственно в 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(); 
+1

Нет, это не возможно в PHP. – lonesomeday

ответ

4

Поскольку переопределить $name в ребенке, то свойство будет иметь значение свойства ребенка. Тогда вы не можете получить доступ к родительскому значению. Это не имело бы никакого смысла, поскольку свойство является общедоступным, что означает, что свойство видимо для дочернего элемента (и вне его), и изменения в нем изменят самое базовое значение. Таким образом, это действительно одно и то же свойство и ценность для этого экземпляра.

Единственный способ иметь два отдельных свойства одного и того же имени - объявить базовое свойство private и дочернее свойство не-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 
+0

Thnx For The Quick Reply .. !! – Shashi

Смежные вопросы