2012-07-01 4 views
-1

Я имею в виду что-то вроде этого:доступ класса ребенка пропеллер от родителей

class parentClass { 
    public function method() { 
     echo $this->prop; 
    } 
} 
class childClass extends parentClass { 
    public $prop = 5; 
} 

Как я могу получить ребенок пропеллер от родительской опоры?

Благодаря ...

+3

Практически - родительский класс не должен ничего знать о своих детях. Вы лучше объяснили * почему * вам это нужно, потому что есть вероятность, что вы решите проблему не так. – zerkms

+0

Поскольку родительский класс должен быть агностиком относительно своих дочерних классов, это невозможно (без какого-либо довольно уродливого финализа). Не могли бы вы объяснить, что вы пытаетесь выполнить? Вероятно, есть лучший способ сделать это. – Andrew

+1

Этот точный фрагмент кода работает отлично. PHP не использует классический полиморфизм, поскольку он знает класс времени выполнения объекта. –

ответ

2

Либо я полностью не понимаю что вы хотите или решение так же тривиально, как следующий код.

class parentClass { 
    public function method() { 
     echo $this->prop; 
    } 
} 
class childClass extends parentClass { 
    public $prop = 5; 
} 
$object = new childClass(); 
$object->method(); 

Я имею в виду дочерний класс расширяет базовый класс, который означает, что он также наследует все методы класса своего родителя. Это делает весь процесс использования метода класса parent таким же простым, как вызов его из экземпляра дочернего класса.

0
//parent 
class parentClass { 

    protected $prop = null; 

    public function method() { 
     echo $this->prop; 
    } 
} 

//child 
class childClass extends parentClass { 
    protected $prop = 5; 
} 

Убедитесь переменная определена в ParentClass, а также. Таким образом, он будет доступен родителям.

1

Все защищенные и общедоступные элементы дочерних классов видны из своего родительского класса в PHP, поэтому приведенный вами пример кода должен работать нормально. Quote from the php doc:

Члены объявляются защищенные могут быть доступны только в классе себя и наследственными и родительских классов.

Но актуальный вопрос: он вам действительно нужен?

Правильный путь OO должен заключаться в определении автономного родительского класса, который выражает что-то. Он не должен нуждаться в для доступа к свойствам дочерних классов - это так называемый code smell. Если вы действительно думаете, что у Вас есть случай, когда подобная конструкция является необходимым, вы, вероятно, ищет абстрактные методы, которые гарантируют, что каждый класс ребенок обладает этим свойством:

abstract class Animal { 
    public function makeNoise() { 
     echo $this->getNoiseString(); 
    } 
    protected abstract function getNoiseString(); 
} 

class Cat extends Animal { 
    protected function getNoiseString() { 
     return 'meow'; 
    } 
}