2012-06-30 65 views
0

我發現,當Zend公司會嘗試自動加載一個文件,該文件不存在,它拋出,我不能在try/catch塊捕獲錯誤。這也發生在我使用class_exists時。我已經通過hack zend解決了這個問題:那麼Zend_Loader包括不拋出異常

if ($once) { 
    if ([email protected]_once ($filename)) { 
     throw new Exception("Failed to include $filename"); 
    } 
    // include_once $filename; 
} 
else { 
    if ([email protected] ($filename)) { 
     throw new Exception("Failed to include $filename"); 
    } 
    // include $filename; 
} 

註釋掉的行是zend的原件。現在,我可以捕捉到無法包含文件時引發的異常。任何人都可以建議一個更乾淨的方式來做到這一點,不涉及黑客zend?

我在Zend的版本1.11.10,並且有問題的代碼是那麼Zend_Loader線146

感謝。

回答

0

不要試圖不存在自動加載類。如果由於某種原因您嘗試自動加載的課程可能會或可能不在,請使用class_exists()調用將該部分代碼包裝起來。

我想不出爲什麼你想要class_exists()在失敗時拋出異常,因爲它的唯一目的是讓你檢查類的存在。

1

而是採用包括或include_once嘗試使用Zend_Loader::loadClass()

這裏是API:Zend_Loader::loadClass($class, $dirs)

一個例子:

Zend_Loader::loadClass('Container_Tree', 
    array(
     '/home/production/mylib', 
     '/home/production/myapp' 
    ) 
); 

現在它如何工作導語:

指定類的字符串是由 代轉化爲相對路徑強調與目錄分隔符爲您的OS和 附加「.PHP」。在上面的例子中,* 'Container_Tree' *成爲 '集裝箱\ Tree.php' 在Windows

如果$顯示目錄是一個字符串或數組,*那麼Zend_Loader ::的loadClass()*搜索 中提供的順序的目錄。第一個匹配文件是 已加載。如果文件沒有指定$迪爾斯存在,那麼 include_path下的PHP環境被搜索。

如果找不到文件或相應的類不存在, *那麼Zend_Loader :: loadClass()就會拋出*一個Zend_Exception異常

這應該允許您對任何不存在的類使用try/catch塊。 Zend_Loader :: loadFile()也具有類似的功能。