这很奇怪。我有一个MySQL的数据库类和独立的类。例如:
class users extends MySQL
此类是用户的通用类,因此可以使用更多次。 但偶尔会出现一个“MySQL_DEBUGGED”类,如果有,我想从中扩展:
class users extends MySQL_DEBUGGED
如果存在,我想继承MySQL_DEBUGGED,否则继承MySQL类。如果我把它变成变量,它会丢失一个错误。怎么做?
答案 0 :(得分:4)
我认为你不能继承一个名字没有在PHP脚本中编写的类。
可能的解决方案是:
MySQL
的类users
课程一直延伸MySQL
班级(这意味着其中一个) MySQL
类MySQL
类这样,您的课程总是扩展MySQL
课程,但您会将正确的包括在内。
基本上,在您的主文件中,您将拥有:
if (DEBUG) {
require __DIR__ . '/MySQL-debug.php';
}
else {
require __DIR__ . '/MySQL-production.php';
}
class users extends MySQL {
// ...
}
MySQL-debug.php
和MySQL-production.php
都会包含一个名为MySQL
的类 - 当然,这两个文件中不包含相同的内容。
答案 1 :(得分:1)
您需要做的就是使用class_exists()
功能。
if (class_exists('MySQL_DEBUGGED')) {
class users extends MySQL_DEBUGGED {
....
}
} else {
class users extends MySQL {
....
}
}
我不会推荐它。有条件地宣布课程似乎是一场噩梦。
答案 2 :(得分:1)
最简单的解决方案是拥有一个空的“桥”类,并始终从该类继承。
然后,你需要声明两次的唯一一个类是空的。
if (class_exists('MySQL_DEBUGGED')) {
class MySQLBridge extends MySQL { }
} else {
class MySQLBridge extends MySQL_DEBUGGED { }
}
class User extends MySQLBridge {
// ... your code ...
}
最后在你的网页上:
require_once('User.php');
$user = new User();
其他建议的解决方案要求您拥有继承类的两个副本,我不建议这样做。