0

我有这个简单的自动加载脚本,唯一的问题是我不知道我class1初始化了什么变量。我 var_dump 变量 $class 它说

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 回答