0

class1この単純なオートロード スクリプトがありますが、唯一の問題は、どの変数が初期化されているかわからないことです。変数 $class を var_dump すると、

object(class1)[1]

しかし、$class->someMethod()クラスを変数にしようとしたとき、未定義ですか?

ClassLib ディレクトリに

-class1.php-class2.php

私のコード:

function init_load($class){ 
include 'ClassLib/'.$class.'.php'; 
}

function verify_fclass($class){
if(!file_exists('ClassLib/'.$class.'.php')){
    return FALSE;
}else{
    if(!class_exists($class)){
        return FALSE;
    }else{
        return TRUE;
    }
}

}

function init_classes($classes = array()){
foreach($classes as $class){
    if(verify_fclass($class) === FALSE){
        $test[$class.'NotExisting'] = $class;
    }else{
             $test = null;
             $class = new $class;
    }
}
var_dump($class); // what is on class
var_dump($test);  // what is on test
}

$class_array = array('NonExistingClass','class1');
spl_autoload_register('init_load');
init_classes($class_array);

$class->what();
4

1 に答える 1

3

関数スコープの外でクラス インスタンス $class を定義する必要があります。

つまり、init_classes 関数で $class を返す必要があります。ここで私が目にする唯一の問題は、複数のクラスを一度にインスタンス化できるようにしたいので、クラスの配列を返す必要があるかもしれないということです。

次のようなことを試すことができます:

function init_classes($classes = array()){
    $error = array();
    $instances = array();

    foreach($classes as $class){
        if(verify_fclass($class) === FALSE){
            $error[$class.'NotExisting'] = $class;
        }
        else{
            $test = null;
            $instances[$class] = new $class;
        }
    }
    return array( 'error' => $error, 'instances' => $instances);
}

$class_array = array('NonExistingClass','class1');
$class = $init['instances']['class1'];
$class->what();

ただし、配列と init_classes メソッドを使用せずにクラスを直接インスタンス化することもできます...

于 2012-10-16T06:17:25.037 に答える