Здравствуйте К примеру есть следующие классы: PHP: class Apple { $Grape = new Grape(); function AppleAlert() { print('hi, Apple') } } class Grape { function GrapeAlert() { print('hi, Grape') } } Задача: сделать так, чтобы можно было обращаться с методам класса Grape вот так: PHP: $element = new Apple(); $element->GrapeAlert(); Вопрос: как это сделать? Заранее, спасибо...
Видел ,но не понял, как с помощью этого вызвать метод другого объекта "без извращений" типа использования конструкций "if...else" и перебора всех методов объекта.
блядь PHP: <?php class Apple { function AppleAlert() { print('hi, Apple'); } } class Grape extends Apple { function GrapeAlert() { print('hi, Grape'); } } $apple = new Grape(); $apple->GrapeAlert(); $apple->AppleAlert(); PHP: <?php interface IFruit{ public function alert(); } class Apple implements IFruit{ public function alert(){ echo "I'm apple"; } } class Grape implements IFruit{ public function alert(){ echo "I'm grape"; } } $apple = new Apple(); $apple->alert(); $grape = new Grape(); $grape->alert(); PHP: <?php class Apple{ /** * @var Grape */ private $grape; public function alert(){ echo "I'm apple"; } public function setGrape(Grape $grape){ $this->grape = $grape; } public function getGrape(){ return $this->grape; } } class Grape{ public function alert(){ echo "I'm grape"; } } $element = new Apple(); $element->setGrape( new Grape()); $element->alert(); $element->getGrape()->alert(); Ну и самый плохой способ: PHP: <?php class Apple { function __call($name, $arguments){ if (method_exists('Grape', $name)){ $grape = new Grape(); return call_user_func_array(array($grape, $name), $arguments); } assert(false); } function AppleAlert(){ echo("hi, Apple\n"); } } class Grape extends Apple { function GrapeAlert(){ print("hi, Grape\n"); } } $apple = new Apple(); $apple->GrapeAlert(); $apple->AppleAlert();