オートローダーの登録方法と作成方法さえ理解していますが、それはまったく問題ありません。ただし、主な問題は次のようなもののために2つのオートローダーを並べて実行する方法です。
class project_one_folder_class extends project_two_folder_class{}
子クラスは、別のプロジェクトにある親クラスに連絡して呼び出しているプロジェクトに属していることに気付くでしょう。
プロジェクトがリンクされている方法プロジェクト2のクラスは常にオートローダーによって表示されますが、プロジェクト1のクラスは表示されません。
だから私がこれについて考えたのは、2つのオートローダーを書いてそれらを登録することでした。なぜなら、phpはもう一方を調べるからです。しかし、phpは一方だけを調べており、もう一方は調べていないようです。
これをどのように解決しますか?
編集
プロジェクト2は親、プロジェクト1は子です。これは、この質問に投稿されたものよりも拡張された質問です。
これをさらに拡張するのが私のクラスです。
class AisisCore_Loader_AutoLoader{
protected static $_instance;
public function get_instance(){
if(null == self::$_instance){
self::$_instance = new self();
}
return self::$_instance;
}
public function reset_instance(){
self::$_instance = null;
}
public function register_auto_loader(){
spl_autoload_register(array($this, 'load_class'));
spl_autoload_register(array($this, 'load_child_class'));
}
public function load_class($class){
$path = str_replace('_', '/', $class);
if(file_exists(get_template_directory() . '/' . $path . '.php')){
require_once(get_template_directory() . '/' . $path . '.php');
}
}
public function load_child_class($class){
$path = str_replace('_', '/', $class);
if(file_exists(get_stylesheet_directory() . '/' . $path . '.php')){
require_once(get_stylesheet_directory() . '/' . $path . '.php');
}
}
}
現在、このクラスは親プロジェクトのすべてをロードします。親プロジェクトオブジェクトを子プロジェクトにロードすることもできます。ただし、このクラスが見つからないため、このクラスを使用して子オブジェクトをロードすることはできません。
WordPressに精通している人はすぐに言うでしょう、そうですget_template_directory
、あなたが望むときに持っているからです。これget_stylesheet_directory
を知っています-私は2つのオートローダーを書きたいと思いますget_stylesheet_directory
。get_stylesheet_directory
:
class project_one_folder_class extends project_two_folder_class{}
エラーなしで動作し、ロードされます。