0

次のカスタム関数でグローバル変数を取り除こうとしています。これは、自動的に定義されたクラスを classes ディレクトリに登録し、指定されたサフィックスを持つ拡張クラスとして再定義することです。

autoload_classes();
print_r(get_declared_classes());   

function autoload_classes() {
    global $class_files, $dirpath;
    $dirpath = dirname(__FILE__) . '/classes/';
    $class_files = array_map(create_function( '$a', 'return basename($a, ".php");' ), glob($dirpath . '*.php'));
    spl_autoload_register(
        create_function('$class_name', '
            global $class_files, $dirpath;
            if (in_array($class_name, $class_files)) 
                include($dirpath . $class_name . ".php");' )
    );

    foreach ($class_files as $class_name) {
        $class_name_alpha = $class_name . "_alpha";
        eval("class $class_name_alpha extends $class_name {};");    
    }
}

私はこのように試しましたが、エラーが発生します。どうすれば修正できますか?

autoload_classes();
print_r(get_declared_classes());   

function autoload_classes() {

    $dirpath = dirname(__FILE__) . '/classes/';
    $class_files = array_map(create_function( '$a', 'return basename($a, ".php");' ), glob($dirpath . '*.php'));
    spl_autoload_register(
        create_function('$class_name', '        
            if (in_array($class_name, ' . var_export($class_files, true) . ')) 
                include(' . $dirpath . ' . $class_name . ".php");
        ')
    );

    foreach ($class_files as $class_name) {
        $class_name_alpha = $class_name . "_alpha";
        eval("class $class_name_alpha extends $class_name {};");    
    }
}

一部のサーバーは PHP v5.3 未満であるため、クロージャーを使用できません。情報をありがとう。

4

1 に答える 1

0

わかりました、これはうまくいきました。var_export()配列にのみ必要だと思いましたが、文字列を含む変数にも必要でした。

autoload_classes();
print_r(get_declared_classes());   

function autoload_classes() {

    $dirpath = dirname(__FILE__) . '/classes/';
    $class_files = array_map(create_function( '$a', 'return basename($a, ".php");' ), glob($dirpath . '*.php'));
    spl_autoload_register(
        create_function('$class_name', '        
            if (in_array($class_name, ' . var_export($class_files, true) . ')) 
                include(' . var_export($dirpath, true) . ' . $class_name . ".php");
        ')
    );

    foreach ($class_files as $class_name) {
        $class_name_alpha = $class_name . "_alpha";
        eval("class $class_name_alpha extends $class_name {};");    
    }
}
于 2012-09-20T12:28:53.560 に答える