php - 组合多个类会导致 PHP 出现错误?

标签 php class

我正在创建一个结构如下的网站:

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.

这不是你正在做的事情:继承只有一种方式。 mysqluseretc 继承 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/

相关文章:

php - 我应该在 PHP 应用程序中的什么位置存储我的数据库用户名和密码?

php - 是否可以将当前登录用户的 ID 与 php 表单一起添加?

php - 如何使用 PHP 创建 PDF 文件?

php - 手动将项目添加到现有对象 [Laravel 5]

PHP 将类定义和类方法调用合并为一行

javascript - 调用类实例方法onclick javascript

php - 有效检查文档是否有子项

无法正确识别实例列表中的 Python 类属性

c++ - 生成 C++ 项目中所有类的列表

java - 如何从两个现有的类文字构造参数化类文字?