我正在创建一个结构如下的网站:
class main { }
class mysql extends main { }
class user extends main { }
class etc extends main { }
这个想法是让这些类互相使用函数。这是行不通的。如何在 user
中调用 mysql
的函数?
编辑: 所有错误都与此类似:
Fatal error: Call to undefined method user::function_in_mysql() in C:\foo.php on line 8
马蒂·莱恩
最佳答案
The idea is for these classes to use functions from each other.
这不是你正在做的事情:继承只有一种方式。 mysql
、user
和 etc
继承 main
的能力,但不继承彼此的能力。
你可以让mysql
扩展user
扩展etc
,这样至少mysql
可以调用所有函数,但是这可能没有意义,因为我认为他们不是祖先,而是彼此的 sibling ,履行着截然不同的职能。
您必须在 main
中定义任何共享方法 - 通常是最好的方法 - 或将类相互引入,以便它们能够调用彼此的职能。例如,您可以将每个所需类的实例添加为构造函数的参数:
$etc = new etc();
$mysql = new mysql($etc);
// mysql's constructor sets $this->etc
// so that it can call etc's functions using $this->etc->function()
或者,更复杂的是,使用依赖注入(inject)或单例模式。我问a related question前段时间关于如何在PHP中处理这个问题,得到了很多反馈,也许能给你一些启发。
关于php - 组合多个类会导致 PHP 出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579926/