PHP自定义类加载器

时间:2010-10-29 10:16:31

标签: php class classloader instantiation

我在php中创建了一个自定义类加载器函数 类似......

load_class($className,$parameters,$instantiate);

它应该包含该类并可选地实例化指定的类

问题在于参数。香港专业教育学院一直试图整天传递参数 我试过了

load_class('className',"'param1','param2'",TRUE);

load_class('className',array('param1','param2'),TRUE);

幸运的是,xD无效 是否可以通过参数? 我甚至试过..

$clas = new MyClass(array('param1','param2'));

这里是..

function load_class($class, $param=null, $instantiate=FALSE){
    $object = array();
    $object['is_required'] = require_once(CLASSES.$class.'.php');
    if($instantiate AND $object['is_required']){
        $object[$class] = new $class($param);
    }
    return $object;
}

2 个答案:

答案 0 :(得分:3)

如果您使用的是PHP 5.x我真的建议您使用autoload。在PHP 5.3之前,您应该创建一种“命名空间”(我通常使用_(下划线))

autoload允许你动态地包含类,如果你的类设计得很好,那么开销是最小的。

通常我的自动加载功能如下:

<?php
function __autoload($className) {
    $base = dirname(__FILE__);
    $path = explode('_', $className);

    $class = strtolower(implode('/',$path));

    $file = $base . "/" . $class;       

    if (file_exists($file)) {
        require $file;      
    }
    else {
        error_log('Class "' . $className . '" could not be autoloaded');
        throw new Exception('Class "' . $className . '" could not be autoloaded from: '.$file); 
    }
}

这样调用

$car = new App_Model_Car(array('color' => 'red', 'brand' => 'ford'));

该函数将包含类

  

应用程序/模型/ car.php

答案 1 :(得分:1)

在我看来,您应该使用__autoload()来加载类,因为它们被引用并避免必须手动调用此方法。这正是__autoload()的用途。