私はさまざまなフレームワークとそれらがクラスの自動ロードをどのように実装するかを調べてきましたが、PHPは初めてなので、その関数を正しく解釈しているかどうかわかりません。すべてのクラスを自動ロードするためにのみ使用して独自のクラスを作成しようとしましたが、クラスにアクセスできません。私のコードは次のようになります。
class Autoloader {
private $map = array();
private $directories = array();
public function register() {
spl_autoload_register(array($this, 'load'));
}
public function unregister() {
spl_autoload_unregister(array($this, 'load'));
}
public function map($files) {
$this->map = array_merge($this->map, $files);
$this->load($this->map);
}
public function directory($folder) {
$this->directories = array_merge($this->directories, $folder);
}
public function load($class) {
if ($file = $this->find($class)) {
require $file;
}
}
public function find($file) {
foreach ($this->directories as $path) {
if (file_exists($path . $file . '.php')) {
return $path . $file . '.php';
}
}
}
}
ブートストラップファイルからクラスを次のようにロードします
require('classes/autoload.php');
$autoload = new Autoloader();
$autoload->map(array(
'Config' => 'classes/config.php',
'Sql' => 'classes/db.php'
));
$autoload->directory(array(
'classes/'
));
$autoload->register();
次に、マップされたクラスの1つをインスタンス化しようとします
$sql = new SQL($dbinfo);
$sql->query($query);
私が行ったことの何が問題になっていますか?これを正しく行っていますか?基本的に、autoloadクラスがブートストラップファイルからクラスの配列をマップし、呼び出された/インスタンス化されたときにファイルを含め、使用されなくなったらそれらの含めを停止するようにします。