Я хочу реализовать следующий фрагмент диаграммы, используя PHP.Как реализовать композицию в php
См. composition example. Мы можем реализовать композицию на Java, используя внутренние классы.
Но в PHP нет аналога «внутреннего класса». Конечно, есть черты. Но мы можем использовать его в нескольких классах.
Я реализовал композиции, как это:
class Head {
private static $instance = NULL;
private function __construct(){}
public static function getInstance() {
$traces = debug_backtrace();
if (strcmp($traces[1]['class'], 'Human')) {
echo "<br>Only human has head"; // Exception can be thrown here
return NULL;
}
if (!static::$instance) static::$instance = new self();
return static::$instance;
}
public function __toString() {
return 'Head';
}
}
class Human {
private $head;
public function __construct() {
$this->head = Head::getInstance();
}
public function __toString() {
return 'I have ' . $this->head;
}
}
class Plant {
private $head;
public function __construct() {
$this->head = Head::getInstance();
}
}
$human = new Human();
echo $human;
$superman = new Plant();
Правильно ли это сделать?
Есть ли лучший способ реализовать отношения композиции в PHP?
Вставьте свой код в свой вопрос в следующий раз. Кроме того, ваш код иллюстрирует простую композицию с одноэлементным классом, каков обходной путь и обходной путь для решения этой проблемы? – dbf
Добавленный код. «Обходной путь», потому что, может быть, есть лучший способ сделать это :) Более родной для PHP, как внутренние классы на Java. – profport
где вы читали эту композицию о внутренних классах? – Wes