嘿所有我想用ReflectionClass加載一些類 在我的XML文件PHP ReflectionClass
定義,但我得到一個錯誤
Error while register class :Class ReportErrorHandler does not exist
我不會當我將利用這個錯誤
require_once('handlers/system/ReportErrorHandler.php');
但我不想require_once類,這就是爲什麼我使用反射 和我的xml文件我只寫類名 沒有完整的路徑,所以我動態俊男require_once'
這裏是我的代碼
public function init(){
$doc = new DOMDocument();
$doc->load('server.xml');
$handlers = $doc->getElementsByTagName("handler");
foreach($handlers as $handler) {
$this->register($handler->nodeValue);
}
}
public function register(&$name) {
try{
$intercafe = new ReflectionClass('Handler');
$reflectionClass = new ReflectionClass($name);
if(!$reflectionClass->isSubclassOf($intercafe)){
//LOG ERROR
error_log("Init-> Error ," + name + " is not a subclass of [net/Handler]");
throw new InvalidArgumentException();
}
error_log("register: " . $reflectionClass);
$handler = $reflectionClass->newInstance();
$type = $handler->getType();
//LOG DEBUG
syslog(LOG_DEBUG ,"Registering handler = " . $name . " TYPE = " . $type);
$key = $type << 32;
$this->table[$key] = $reflectionClass;
}catch(Exception $ee){
error_log("Error while register class :" . $ee->getMessage());
}
}
我的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<server>
<server-version>0.1</server-version>
<handlers>
<handler>AuthenticateHandler</handler>
<handler>ReportErrorHandler</handler>
<handler>DisconnectedHandler</handler>
<handler>NoSuchRequestHandler</handler>
</handlers>
</server>
這是我得到的, 錯誤而寄存器類:功能「ReportErrorHandler」未找到(函數'ReportErrorHandler'未找到或函數名無效) – shay 2010-07-30 15:11:11
@shay就像@Mark所說的,你必須包含這些文件。自動加載器可以自動爲你做這件事,所以你不必編寫include語句,但你必須設置它,以便它可以找到你的類。它沒有關係如何在Java中完成。 PHP不是Java。 – Gordon 2010-07-30 15:30:28