2010-04-27 39 views
1

我是網絡編程新手。我很擅長在桌面上使用c#.net平臺。我試圖理解PHP和PHP框架,但我有點困惑。我明白,一個PHP文件可以將文件中的類導入帶有require_once函數的另一個PHP文件。但是框架不會用require_once函數導入他自己的類。我認爲他們做了一些我不明白的事情。有人可以向我解釋一下嗎?php和自己的框架如何在後臺運行?

回答

2

大多數框架使用稱爲「自動加載」的技術來自動解析幷包含所需的依賴關係。

「Autoloader」只是一個函數,當一個未知的類被引用時,它被PHP調用。該「自動加載器」可以根據文件名從程序創建該類或簡單地從外部文件創建該類。

目前(PHP 5.1.2及更高版本)正確的方式是使用spl_autoload_register()。下面是一個自動加載機的一個示例:

function autoload_example($className) { 
    $normalizedName = strtolower($className); 

    if(file_exists('includes/' . $normalizedName . '.inc')) { 
    require_once('includes/' . $normalizedName . '.inc'); 
    } elseif(file_exists('includes/' . $normalizedName . '.inc')) { 
    require_once('includes/' . $normalizedName . '.php'); 
    } else { 
    die('Class ' . $className . ' not found'); 
    } 
} 

spl_autoload_register('autoload_example'); 

$myAwesomeObject = new Awesome(); 

在上面的例子,PHP將運行「自動裝載機」 autoload_example當將撞擊參考類Awesome

「Autoloader」將首先嚐試查找文件include/awesome.inc。如果它能找到它,它會包含它。

如果不是,它會查找名爲include/awesome.php的文件。如果它能找到它,它會包含它。

如果不是,它將die()指出它找不到我的Awesome類。