2012-11-29 77 views
5

我有一個關於PHP加載相關的類以正確的方式/最佳實踐疑問。在PHP中加載依賴關係的正確方法是什麼?

我通常把所有依賴於每個類的開頭使用一個include_once在類似於Java進口的方式。例如:

include_once 'dto/SomeObjectDTO.php;' 
include_once 'dao/SomeObjectDAO.php;' 
include_once 'util/SomeObjectUtil.php;' 

class SomeObjectService{ 
    #class code here 
} 

這是加載類的最好方法嗎?或者也許加載Bootstrap.php的所有課程?其他方法?

請注意,我說的是加載我自己的類,而不是複雜的外部類,比如框架。

+4

使用自動加載磁帶機通常被認爲是最好的做法如今 –

+0

PHP是非常快的。你也可以使用此方法.... –

回答

2

像Homer6說,自動加載是建立在依賴加載機制一個PHP的。

PHP-FIG提出了一個家庭的PHP編碼標準稱爲PSR。 PSR-0處理類命名和自動加載。這裏有一些鏈接:

另外,請記住,自動加載是有代價的。在建議的默認自動加載器中有很多字符串工作並與fs一起工作(您可以實現自己的更快的自動加載器,但它不符合標準)。當您需要加載很多類時,這會使自動加載速度變慢。所以如果你只需要加載2個類,你的方法會更快,更容易理解。

2

PHP的,你可以註冊你的自動加載方法。 Symfony 2包含一個很好的課程。

http://php.net/manual/en/function.spl-autoload-register.php

我已經適應它,我們已經寫了圖書館管理員的工作。

https://github.com/homer6/altumo/blob/master/source/php/loader.php

https://github.com/homer6/altumo/blob/master/source/php/Utils/UniversalClassLoader.php

這種適應可以讓你有不需要的頂級命名空間具有相同的文件夾名稱的命名空間。

1
set_include_path(get_include_path() 
     . PATH_SEPARATOR . 'path1' 
     . PATH_SEPARATOR . 'path2' 
); 

// auto load classes: 
function autoloadClasses($className) { 
require_once $className . '.php'; 
} 

spl_autoload_register('autoloadClasses'); 
相關問題