0

コードを更新してspl_autoload_registerを使用しようとしていますが、単純に機能しません!!! 私はPHP5.3.8を使用しています-Centos/Ubuntu /Win7でApache2.22を使用していて、何かをエコーし​​ようとしていますが、代わりに何も得られません...過去3時間、結果が得られずに動作させようとしています...これは私を怒らせる!!!

class ApplicationInit {
    // Constructor
    public function __construct() {
        spl_autoload_register(array($this, 'classesAutoloader'));
        echo 'construct working...!';
    }

    // Autoloading methods
    public function classesAutoloader($class) {
        include 'library/' . $class . '.php';

        echo 'autoload working...!';
    }
}

__constructからの最初のエコーは機能しますが、「classesAutoloader」はまったく機能しません。このクラスはフォルダー内のphpファイルで定義されており、次のようにindex.phpから呼び出しています。

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', getcwd() . DS);
define('APP', ROOT . 'application' . DS);

// Initializing application
require(APP.'appInit.php');
$classAuto = new ApplicationInit();

事前に感謝します、どんな助けでも本当にありがたいです!

4

2 に答える 2

1

あなたは間違ったことをしているようです。渡す関数spl_autoload_registerは、クラス ファイルのロードを担当します。

あなたのコードが呼び出しています

$classAuto = new ApplicationInit();

しかし、その時までに、ApplicationInitすでにロードされているので、オートロード関数は呼び出されません

より論理的な方法は、あなたが呼び出すことです

spl_autoload_register(function($class){
    include 'library/' . $class . '.php';
});

それからあなたが電話するとき

$something = new MyClass();

が定義されてMyClassいない場合、関数を呼び出してそのファイルをロードし、クラスを定義します。

于 2012-08-30T22:21:29.637 に答える
1

あなたの問題は何ですか?あなたのコードは正しく動作しています。

class ApplicationInit {
    public function __construct() {
        spl_autoload_register(array($this, 'classesAutoloader'));
        echo 'construct working...!';
    }

    public function classesAutoloader($class) {
        include 'library/' . $class . '.php';

        echo 'autoload working...!';
    }
}

$classAuto = new ApplicationInit(); //class already loaded so dont run autoload

$newclass = new testClass(); //class not loaded so run autoload
于 2012-08-31T08:03:56.197 に答える