Я работаю над новым классом PHP. У меня есть один класс с некоторыми параметрами, каждый из которых будет экземпляром классов, созданных отдельно в виде отдельных сценариев PHP.
Так что я:
.- class.php
|_ class.one.php
|_ class.two.php
|_ class.three.php
Первый класс с именем head () будет иметь параметры $ arm, $ foot и $ body:
Class Head {
protected $arm;
protected $foot;
protected $body;
public function __construct()
{
$this->arm = new Arm();
$this->foot = new Foot();
$this->body = new Body();
}
}
$myHead = new Head();
// with this instance, I can access to ALL classes instantiated before
Теперь рассмотрим класс Arm ():
Class Arm()
{
public function doSome()
{
echo "Cheers!";
}
}
и класс Foot ():
Class Foot()
{
public function doKick()
{
echo "GOAL!";
}
}
Что я хочу, так это вызвать метод doSome () из метода doKick ().
Это возможно?
У вас есть классы, которые полностью отделены друг от друга. Они ничего не поделились. Если вы расширяете класс от родителя до потомка, ребенок знает все о родителе (но родитель не знает ничего, что изменилось в потомке).
Вы можете взломать его и использовать ужасный обходной путь. Что вы должны сделать, это работать над своим дизайном. Нужно ли ноге знать о руке? Если это так, то нога должна отходить от руки. Имеет ли это смысл? На самом деле, нет. Таким образом, тот факт, что Фут говорит Arm сделать что-то, не имеет смысла. Возможно, Foot должен содержать экземпляр Head. Рука может также. Тогда Фут может сказать Хэду, что если есть какие-либо руки, они должны делать свое дело. Это опять беспорядок.
Итак, еще раз, вы возвращаетесь к дизайну. Это действительно должно быть сверху вниз. Когда вы не можете работать сверху вниз, вам нужно изучить абстрактные методы и / или интерфейсы. Абстрактный метод говорит детям реализовать метод, не реализованный в родительском. Интерфейсы заказывают класс для реализации набора методов, чтобы все знали, что класс будет иметь эти методы.
Других решений пока нет …