這將會很奇怪。我有一個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