2012-07-16 52 views
0

我被PHP中的自動加載器和名稱空間所困惑。PHP自動加載器和名稱空間

我的類的資產文件內組織,

-- Assets 
    -- user 
     -- User.php 
    -- database 
     -- Database.php 

這只是一個簡單的版本,也有每個文件夾中多個文件(即用戶數據庫)。

沒有必要擔心衝突的廠商的名字,因爲在這個項目中只有一個供應商(即我),但例如,使用PSR0自動加載:

function autoload($className) 
{ 
    $className = ltrim($className, '\\'); 
    $fileName = ''; 
    $namespace = ''; 
    if ($lastNsPos = strripos($className, '\\')) { 
     $namespace = substr($className, 0, $lastNsPos); 
     $className = substr($className, $lastNsPos + 1); 
     $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; 
    } 
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; 

    require $fileName; 
} 

我需要聲明命名空間在我的每個班級文件中,並使用new user\User();來初始化班級。它是不可能通過使用new user_User;

非常感謝

+0

'spl_autoload_extensions('。php');''和'spl_autoload_register();'太棒了! – 2012-07-16 00:03:27

+0

'spl_autoload_register('autoload');'用於設置自動加載器 – 2012-07-16 00:06:43

+0

是的,我知道。我更喜歡內置的自動加載器。 – 2012-07-16 00:07:44

回答

1

的PSR-0自動加載約定不要求您使用映射到您的目錄結構的命名空間,用來初始化它。您也可以在類名中使用下劃線來達到基本相同的目的。

\命名空間分隔,任何下劃線在類名仰視加載文件時轉換爲DIRECTORY_SEPARATOR。因此,類user_User\user\User都會導致自動裝入器尋找相同的文件:user/User.php

+0

好吧,我聲明'$ User = new user_User;'但由於某種原因,它返回了這個錯誤:'類'user_User'找不到' – 2012-07-16 00:12:37

+0

你真的註冊這個自動加載函數(與'spl_autoload_register')嗎? – 2012-07-16 00:15:47

+0

是'spl_autoload_register('autoload');' – 2012-07-16 00:17:51

相關問題