2013-06-05 63 views
0

我正在嘗試升級我正在努力遵守PSR-0的新項目的代碼。PHP OOP自動加載類命名空間問題

我正在使用和SPL加載器類,但我可能做錯了什麼,我只是不能發現問題是什麼。

我不斷收到以下錯誤:

Fatal error: Class 'widezike\General' not found in /nfs/c03/h04/mnt/169128/domains/widezike.com/html/beta/lib/functions.php on line 14 

這是我的文件夾結構:

index.php 
-lib 
config.php 
init.php 
spl-class-loader.php 
functions.php 
    -widezike 
     -General.php 

這是我的職能文件,其開始任何與服務器端的代碼來執行:

<?php 

include 'init.php'; 
include 'config.php'; 

include 'spl-class-loader.php'; 

$loader = new SplClassLoader('General', 'lib/widezike'); 
$loader->register(); 

use widezike\General; 

//Run the output buffer 
General::ob(); 

所以這是我現在的代碼,但我似乎無法找到什麼導致致命錯誤...

在此先感謝

+0

你能發佈錯誤嗎? –

+0

錯誤是在頂部,致命錯誤:類'widezike'等.... –

+0

我們可以看到自動加載機本身? – Leri

回答

1

我正在這裏有點猜測,但我認爲這個問題是在構造函數中..

$loader = new SplClassLoader('General', 'lib/widezike'); 

在你的代碼linked to它們的命名空間和包括路徑。

玩這些,直到它的作品是我可以建議的。

您可以試試:

$loader = new SplClassLoader(null, 'lib'); 

或者

$load = new SplClassLoad('General', 'lib'); 

在另一方面,我個人只用一個很簡單的spl_autoload_register功能做我的類加載了我..

spl_autoload_register(function($class){ 

    $filename = str_replace('\\', '/', $class) . '.php'; 
    require($filename); 

}); 

$object = new phutureproof\common\whatever(); 

然後,我將有一個文件/phutureproof/common/whatever.php與內容:

<?php 
namespace phutureproof\common; 

class whatever 
{ 

} 
+0

謝謝,我認爲這可能是一個不同的問題,我試過你的自動加載器,我得到同樣的問題,不知何故,我想PHP沒有分出類名,並試圖從字面上加載一個名爲widezike \ General的類。使用你的方法,我得到了這個:lib/widezike/general.php 致命錯誤:Class'lib \ widezike \ General'not found in /nfs/c03/h04/mnt/169128/domains/widezike.com/html/beta/第20行的lib/functions.php我讓它打印生成的include,以確保創建的是正確的東西,它是:S,所以我難倒了 –

+0

你在你的類中放入了正確的命名空間嗎? 'namespace lib \ widezike; class General {}' – Dale

+0

是的,在那裏 –

0

我意識到問題是我的名字空間是錯誤的,所以如果你有同樣的問題,只要檢查並確保你的名字空間是正確的!