这将会很奇怪。我有一个MySQL数据库类和独立的类。例如:Php从不同的类运行时延伸(扩展为变量?)
class users extends MySQL
这个类是用户的一般类,所以可以多用几次。 但是有时候,一个“MySQL_DEBUGGED”类存在,如果是这样,我想从它扩展:
class users extends MySQL_DEBUGGED
我想如果存在继承MySQL_DEBUGGED,否则MySQL的类。如果我把它放到变量中,它会抛出一个错误。怎么做?
这将会很奇怪。我有一个MySQL数据库类和独立的类。例如:Php从不同的类运行时延伸(扩展为变量?)
class users extends MySQL
这个类是用户的一般类,所以可以多用几次。 但是有时候,一个“MySQL_DEBUGGED”类存在,如果是这样,我想从它扩展:
class users extends MySQL_DEBUGGED
我想如果存在继承MySQL_DEBUGGED,否则MySQL的类。如果我把它放到变量中,它会抛出一个错误。怎么做?
您只需使用class_exists()
函数即可。
if (class_exists('MySQL_DEBUGGED')) {
class users extends MySQL_DEBUGGED {
....
}
} else {
class users extends MySQL {
....
}
}
虽然我不会推荐它。有条件地声明类似乎是一场噩梦。
多数民众赞成是正确的,但然后所有的方法必须复制/粘贴,这就是我想避免 – deeped
我不认为你可以继承一个名字不是写在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
类 - 这将不包含在这两个文件同样的东西,的课程。
最简单的解决方案是拥有一个空的“桥”类,并始终从该类继承。
然后,你需要声明两次的唯一类将是空的。
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();
其他建议的解决方案需要你有你的继承类,我不建议的两个副本。
我可以问你为什么你有两个不同的类(MYSQL和MYSQL_DEBUGGED)?在我看来,问题是你有两个类,而不是只有一个可以配置为更详细(即:调试)或不是 – laurac
我不知道你在做什么,但如果你只有两个类由于调试,你应该使用一个记录器(即:log4php),并配置它为您的需要 – laurac