我正在开发一个新的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!";
}
}
我希望从方法doKick()调用方法doSome()。
这可能吗?
答案 0 :(得分:1)
您的课程彼此完全分开。他们没有任何共享。如果您将一个类从父级扩展到子级,则该子级知道父级的所有内容(但父级不知道子级中的任何更改)。
你可以破解它并使用可怕的解决方法。你应该做的是做你的设计。 Foot需要了解Arm吗?如果是这样,那么Foot必须从Arm延伸。那有意义吗?并不是的。因此,Foot告诉Arm做某事这一事实并不合理。也许Foot应该包含Head的实例。手臂也可以。然后,Foot可以告诉Head,如果有任何武器,他们应该做他们的事情。那又是一团糟。
所以,再一次,你回到设计。它确实需要自上而下。如果您无法以自上而下的方式工作,则需要研究抽象方法和/或接口。抽象方法告诉孩子们实现一个未在父实现中实现的方法。接口命令一个类来实现一组方法,这样每个人都知道该类将具有这些方法。