2012-11-29 21 views
5

PHPで依存するクラスをロードする方法については、正しい方法とベストプラクティスに疑問があります。PHPで依存関係をロードする正しい方法は何ですか?

通常、すべての依存関係は、Javaインポートに似た方法で、include_onceで各クラスの先頭に入れます。何かのように:

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

はオートローディングは、PHPの依存ローディング機構に組み込まれている、と述べました。

PHP-FIGは、PSRと呼ばれるPHPコーディング規格ファミリを提案しました。 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'); 
関連する問題