2010-10-01 64 views
1

我試圖使用is_callable來檢查類和方法的存在,它進行得非常順利,但始終顯示我的包含參數。如何停止顯示is_callable包括

下面是代碼:

if(!is_callable(array(self::$classy,self::$action))) { 
    self::$classy = 'index'; 
    self::$action = 'index'; 
} 

這裏是結果:

.;C:\php5\pear;./lib;./model;./helper;./controller;/model/;/helper/;/controller/;/lib. 

出現這種情況只有在返回值爲true,這意味着該方法不調用或類不是在註冊自動加載。

任何想法???

+0

你有沒有把任何迴音語句中的代碼? – Extrakun 2010-10-01 06:48:59

+1

您或您使用的框架註冊了自動加載功能嗎? – VolkerK 2010-10-01 07:28:30

+0

Extrakun:if語句中沒有echo語句。 – JohnTaa 2010-10-01 10:56:06

回答

0

這應該做的伎倆:

ob_start(); //激活outputbuffering(防止服務器發送任何內容到客戶端)如果

(!is_callable(陣列(自:: $優雅,自:: $行動))){

self::$classy = 'index'; 
self::$action = 'index'; 

}

ob_end_clean(); //結束outputbuffering和丟棄產生

+0

這是我將採取的最後一步,如果沒有其他解決方案可用 – JohnTaa 2010-10-01 11:37:20

1

你說你檢查的類和方法的存在..所以我的第一個問題是,你不能使用這個class_exists();method_exists();任何輸出?

另一個想法對於需要在類的某些方法,是使用接口。然後,只需確保該類存在,並且如果在界面中定義的方法在該類中不可用,則PHP應該給出一些消息。

+0

我想同時檢查多個文件夾中存在的類,我已經註冊的文件夾spl_autoload_register和class_exists()要求首先自動加載類,並要求其他代碼查找大量代碼的目錄。 – JohnTaa 2010-10-01 11:29:36

+0

我在多個目錄中使用'spl_autoload_register',我所做的只是創建一個可能的classNames的索引(並且我可以爲每個目錄的className配置一個前綴)。這樣您不必每次搜索課程時都要搜索,只需索引即可。結合兩種功能(索引,加載類),它只有87行代碼(不幸的是,由於公司政策,我無法共享它)。 – CharlesLeaf 2010-10-01 11:33:40

+0

類名不是我的選擇,它是用戶的輸入所以我不能索引,我我從請求的URL中提取變量 – JohnTaa 2010-10-01 13:47:25