2013-05-15 61 views
0

我不知道這恰恰是在自動加載的問題,但我有這個問題,這裏是我的代碼:__DIR__和自動加載PHP

index.php

require __DIR__ . '/app/autoload.php'; 

文件夾結構:

index.php 
app/ 
--autoload.php 

autoload.php

function autoloader($className) { 
    // List Directories to Autoload Classes 
    $paths = array(
     __DIR__ . '/system/', 
     __DIR__ . '/app/models/', 
     __DIR__ . '/app/dao/' 
    ); 
    foreach($paths as $path) { 
     $file = $path . '/' . $className . '.php'; 
     if (is_file($file)) 
      include $file; 
    } 
} 

出於某種原因,這是行不通的,即使我做的:

__DIR__ . '../system/ 
... et al. 
+0

什麼是錯誤?調試的最佳方法是var_dump($ paths),然後查看確切的路徑。 – We0

+0

它不加載文件,.. –

+0

使它require_once,打賭它會拋出一個錯誤,然後... – We0

回答

2

DIR在自動加載文件將參考/應用程序。

嘗試:

function autoloader($className) { 
    // List Directories to Autoload Classes 
    $paths = array(
     '../system/', 
     '/models/', 
     '/dao/' 
    ); 
    foreach($paths as $path) { 
     $file = $path . '/' . $className . '.php'; 
     if (is_file($file)) 
      require_once $file; 
    } 
} 

如果失敗開始呼應了路徑和目錄,看看他們是否被正確引用。

+0

這仍然無法正常工作。我回應並說'../ system/File.php'但仍然不包括它。 –

+0

你可以把你的目錄結構在原來的問題 - 我們將能夠看到的東西和解決您的問題 –

+0

它在那裏... –

0

我會試試這種方式。 加載autoload.php任何地方前(應是總是加載文件,我在你的情況下,猜測它的index.php)我想在腳本的begining

/** 
* Use the DS to separate the directories (just a shortcut) 
*/ 
if (!defined('DS')) { 
    define('DS', DIRECTORY_SEPARATOR); 
} 

/** 
* The full path to the directory which holds application files, without a trailing DS. 
*/ 
if (!defined('ROOT')) { 
    define('ROOT', dirname(__FILE__)); 
} 

somwhere定義ROOT變量,然後在你的autoload use ROOT

$paths = array(
    ROOT . DS. 'system' . DS, 
    ROOT . DS. 'app' . DS . 'models' . DS, 
    ROOT . DS. 'app' . 'dao' . DS 
); 
+0

我想知道你在哪裏得到了你的代碼,哈哈,..它真的和我在包含評論之前所做的類似。 。 –

+0

+1我使用DS和PATH_ROOT常量。在你的引導中聲明這些,你很好走! – Jimbo

+0

geez ...你應該閱讀爲什麼全局狀態是壞的...有一件事,是'/'是跨平臺,不需要使用DS或DIRECTORY_SEPARATOR –