2011-10-07 10 views
0

私はspl_autoloadが呼び出されていますが、問題は2番目のオートロードが実行されないためです。このコードでは、スクリプトは死ぬべきです。フォルダ配列からクラスを削除すると、自動ロードが機能します。私のコードは次のようになります:spl_autoloadは第2のオートロード機能を呼び出さない

<?php 
ini_set('error_reporting', E_ALL); 
ini_set('display_errors','On'); 
/*** nullify any existing autoloads ***/ 
spl_autoload_register(null, false); 
/*** specify extensions that may be loaded ***/ 
spl_autoload_extensions('.php'); 

function dataLoader($class) { 
    foreach (array(PV_CORE.DS.'data'.DS, PV_CORE.DS.'system'.DS, PV_CORE.DS.'cms'.DS, PV_CORE.DS.'util'.DS,PV_CORE.DS.'components'.DS, PV_CORE.DS.'template'.DS) as $folder){ 
     if (is_file($folder.$class.'.php')) { 
      include_once $folder.$class.'.php'; 
     } 
    }//end foreach 
} 

function testLoader($class) { 
    die(); 
    $filename = $class. '.php'; 
    $file =PV_CORE.DS.'data'.DS.$filename; 
    if (!file_exists($file)) { 
     return false; 
    } 
    require_once $file; 
} 

spl_autoload_register('dataLoader'); 
spl_autoload_register('testLoader'); 
+0

あなたの関数が登録されているのに役立ちますあなたのコールバック内のautoloadスタック

の実行を継続する

希望をしたい場合:ますprint_r(spl_autoload_functionsを());私はあなたがしようとしていることを実際には得られませんでした。 – Talisin

答えて

1

あなたのコードは機能しますが、誤解されている可能性があります。

あなたの機能が登録されています

print_r(spl_autoload_functions()); 

リターン:

Array 
(
    [0] => dataLoader 
    [1] => testLoader 
) 

、あなたがクラスを初期化する場合

$class_obj = new ClassName(); 

をデータローダーは、ファイルをロードしようとします:

$folder.ClassName.php 

スクリプトは、最初にクラスを見つけられない場合、2番目または他の登録された関数のみを読み込みます。

したがって、関数dataLoaderで$クラスを削除すると、最初に登録された関数で__autoloadクラスが見つからなくなるため、登録された2番目の関数などでそのクラスを調べようとします。

+0

はい、私は、spl_autoloadがすべてのクローズをロードしていると仮定しましたが、クラスが見つからない場合はオンデマンドでロードします。 –

1

あなたは

を返す必要があります。 //クラスがロードされていて、オートロードスタックが停止されるようにしたい場合

return false; //クラスがロードされていないと、あなたは、これが