6

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

4 に答える 4

2

PHP の autoload メソッドを登録できます。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

この適応により、最上位の名前空間が同じフォルダー名を持つ必要のない名前空間を持つことができます。

于 2012-11-29T12:22:07.357 に答える
2

バージョン 5.3 以降、PHP は名前空間をサポートしています。これにより、C++ や Java で知っているのと同じように、パッケージとクラスの階層を持つことができます。

詳細については、次のリソースをご覧ください。

http://www.php.net/manual/en/language.namespaces.basics.php

http://php.net/manual/en/language.namespaces.importing.php

于 2012-11-29T12:26:14.823 に答える
2

Homer6 が言ったように、オートローディングは php に組み込まれた依存関係ローディング メカニズムです。

PHP-FIGは、PSR と呼ばれる PHP コーディング標準のファミリーを提案しました。PSR-0 は、クラスの命名とオートロードを扱います。ここにいくつかのリンクがあります:

また、オートローディングには代償が伴うことに注意してください。提案されたデフォルト オートローダでは、多くの文字列作業と fs での作業があります (独自のより高速なオートローダを実装できますが、標準に準拠する予定はありません)。これにより、多くのクラスをロードする必要がある場合、オートロードが遅くなります。したがって、2 つのクラスのみをロードする必要がある場合は、アプローチがより高速で理解しやすくなります。

于 2012-11-29T12:28:39.190 に答える
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');
于 2012-11-29T12:23:49.200 に答える