0

spl_autoload_registerの使い方を学んでいます

私は次のようなフォルダ構造を持っています:

lib/projectname/home/homepage.php

したがって、このようなファイルを含めると、次のように機能します。

include("lib/projectname/home/homepage.php");
$home = new homepage();

次のようなautoload.phpファイルを追加しました。

function myclass($class_name) {
   $class_name = str_replace('_', DIRECTORY_SEPARATOR, $class_name) . '.php';
   require_once($class_name);
 }

spl_autoload_register('myclass');

今、私がクラスを使おうとすると、私はそれを次のように参照しています:

require_once("autoload.php");

$home = new lib_projectname_home_homepage;

これを行うと、次のエラーが発生します。

Fatal error: Class 'lib_projectname_home_homepage' not found

したがって、クラスファイルのロードは機能しているように見えますが、ファイル内でクラスが見つかりませんか?

実際のhomepage.phpファイルは次のようになります。

class homepage {

    function __construct(){

        echo "homepage";
    }

}

これを正しく機能させるには、何を変更する必要がありますか?

4

1 に答える 1

3

変化する

class homepage {
    function __construct(){
        echo "homepage";
    }
}

class lib_projectname_home_homepage {
    function __construct(){
        echo "homepage";
    }
}

または変更:

require_once($class_name);

require_once('lib/projectname/home/' . $class_name);

その後:

$home = new homepage();

オートローダーの概念は、単に指定された名前のクラスを見つけることです。クラス名をその場で変更することはありません。

于 2013-01-09T21:18:54.943 に答える