class PersonWriter{ public function writeName(Persion $p){ print $p->getName()."\n"; } public function writeAge(Persion $p){ print $p->getAge()."\n"; } } |
class Person { private $writer; function __construct(PersonWriter $writer;){ $this->writer = $writer; } function __call($methodname,$args){ if(method_exists($this->writer,$methodname)){ return $this->writer->$methodname($this); } } //... } |
$person = new Person(new PersonWriter()); $person->writeName(); |