私はオートローダークラスのディレクトリマッピング手法を試してきましたが、これは少し苦労しています。私はかなり簡単な解決法(表面上)を考え出すことができましたが、それはまったく動作していないということは完全に謎に包まれていましたが、他の「より明白な」解決策は失敗しました。以下は私の混乱を説明するいくつかのコードスニペットです。ここでphpオートローダー:これはなぜ機能しますか?
は、作業コードです:
<?php
spl_autoload_register('my_autoloader');
function my_autoloader($class) {
$classMap = array(
'classes/',
'classes/sites/',
'classes/data/'
);
foreach ($classMap as $location) {
if ([email protected]_once($location . $class . '.php')) { // @ SUPPRESSES include_once WARNINGS
// CLASS DOESN'T EXIST IN THIS DIRECTORY
continue;
} else {
// CLASS IS AUTO-LOADED
break;
}
}
}
?>
は、ここで私はべき作業を感じたスニペットですが、しない:これら2しばらくので
<?php
spl_autoload_register('my_autoloader');
function my_autoloader($class) {
$classMap = array(
'classes/',
'classes/sites/',
'classes/data/'
);
foreach ($classMap as $location) {
if (file_exists($location . $class . '.php')) {
require_once ($location . $class . '.php');
}
}
}
?>
後者は私に多くの意味がありますバージョン作業:
<?php
spl_autoload_register('my_autoloader');
function my_autoloader($class) {
require_once ('classes/sites/' . $class . '.php');
}
?>
<?php
spl_autoload_register('my_autoloader');
function my_autoloader($class) {
$location = 'classes/sites/';
require_once ($location . $class . '.php');
}
?>
この1つはスローされます"そのようなファイルやディレクトリはありません..."(パスに "sites /"がないことに注意してください。
<?php
spl_autoload_register('my_autoloader');
function my_autoloader($class) {
require_once ('classes/' . $class . '.php');
}
?>
「そのようなファイルやディレクトリ...」というエラーは私が、私は単純にクラスのサポートファイルをチェックすることができると思うし、作られた場合(file_exists()){するrequire_once(); break;} else {continue;}
なぜ機能しないのですか?そして、なぜ最初のスニペットが機能しますか?サポートパス/ファイルは、明示的に含まれたり、必要とされることはありません。
はinclude_pathsのクラスパスの親ディレクトリですか? – Orangepill
サポートファイルは含まれていますが、if文に組み合わされています:if(!@include_once($ location。$ class。 '.php')) –
ええと、私はちょっと考えていましたが、それで、ありがとう。それは私が必要とするものを達成するための非常に控えめな方法のように感じるので、これはソリューションを改善するために私のかゆみを再現するだけです。 Orangepill、私はそれをやる方法がわかりません...私はしばらくの間PHPで作業していませんでした。そして、最後にしたとき、私は今半分プログラミングに熟達していませんでした。基本的に、PHPでJavaとColdFusionのやり方をすでに知っていることをしようとしています。 –