2014-02-07 4 views
0

У меня есть крошечные проблемы.Вопросы инкапсуляции

У меня есть 3 класса:

Class Animal { 
    public $dog; 
    function __construct() { 
     $this->dog = new Dog(); 
    } 
} 
Class Dog { 
    public $scream; 
    function __construct() { 
     $this->scream = new Scream(); 
    } 
} 
Class Scream { 
    public $scream; 
    function __construct() { 
    } 
    public haaa(){ 
     return 'hello World'; 
    } 
} 

Я пытаюсь получить haaa() функцию .. с

$animal = new Animal(); 
$animal->haaa(); 

Если функция haaa() находится в Dog класс .. он работает хорошо .. Возможно ли, что у нас есть предел глубокой инкапсуляции?

Спасибо!

ответ

4

Основываясь на вашем примере это будет:

$animal->dog->haaa();

Однако, это может быть лучше, чтобы изменить дизайн так, что Dog extends Animal:

class Dog extends Animal { 
    public function scream(){ 
    // do stuff 
    } 
} 

$dog = new Dog(); 
$dog->scream(); 

Это более семантический, так как собаки принадлежат животное «царство».

+0

да .. это правда ... плохая ошибка -_- "спасибо! –

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