オートローダーを使用しない場合 ( Autoloading Classes を参照)、必要なすべてのファイルをすべての依存ファイルに手動で含める必要があります。通常、すべてのファイルが独自の依存関係をすべて管理することをお勧めします。
あなたの依存関係を理解していれば、これは次のようになります。
- Index.phpはFactoryA.phpに必要です
require_once
- FactoryA.phpは
require_once
A.Class.php & Log.phpになります
- A.Class.phpは
require_once
Database.php & Log.phpになります
- Database.php は
require_once
Log.phpになります
別の方法は__autoload
、必要に応じて必要なファイルを使用して取得させることです。したがって、あなたの
function __autoload($class_name) {
include './class/' . $class_name . '.php';
}
$a = new A();
ただし、spl_autoload_register() は、クラスを自動ロードするためのより柔軟な代替手段を提供します。このため、__autoload() の使用は推奨されておらず、将来的に非推奨または削除される可能性があります。PHP Refを参照してください。
PSR-0 標準を確認することをお勧めします。おそらく、SplClassLoader.php 要点を使用するだけでよいでしょう。
名前空間とパスの標準に従うようにクラスの名前を変更する必要がありますが、次のようにすることができます。
//This is the only file you need to require
require_once('/path/to/SplClassLoader.php');
$classLoader = new SplClassLoader('Class', './class');
$classLoader->register();
$a = new A();
デモンストレーション用の小さな CLI リファレンス プロジェクトを作成し、bubba-h57/AutoLoadingをチェックアウトして、コマンド ラインから実行しました。次のような結果が表示されます。
[cinamon-vm] AutoLoading> php index.php
From the factory!
From the AClass!
From the Database!
Pure win!
PHP の Autoload 機能が CLI モードで動作しないのはなぜですか?を参照してください。コマンド ライン (cli) スクリプトからオートローダーを使用する方法については、