PHP5中有一个很方便的__autoload的魔术函数,PHP Manual中的示例如下:
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
算是很方便的一个函数,然而有一个缺陷就是没有名称空间,大量的class不得不放在一个目录下面,才可以用这个自动加载php的魔术函数,如果class文件要放在不同的目录里面,这个自动载入就无能为力了。为了解决这个问题,自己写了一个loadClass函数实现类似功能,代码如下:
function loadClass($tgt){
$class = substr($tgt, strrpos($tgt, '.')+1);
require_once(DIR_APP.str_replace('.','/',$tgt).'.php');
return new $class();
}
$test = loadClass("model.test");
$test->myfunc();
DIR_APP/model/test.php:
class test{
function myfunc(){
echo "hello, world!~";
}
}
如此一来,就可以方便的加载在不同的目录里面的(缺点就是要打完整的”名称空间”),并且应该在PHP4中也可以使用(虽然PHP5已经是大流)……
补充@2009-02-23 22:42
就此自动载入的问题咨询了一下某飞,给了两个采用spl_autoload的自动载入的实现(by flying~):
function loader($className) {
$classPath = str_replace('_', DIRECTORY_SEPARATOR, $className);
require $classPath . '.php';
}
spl_autoload_register('loader');
$user = new Model_User();
// load (inlcude paths):/Model/User.php
class的名称定义遵循PEAR标准用下划线_进行分隔
更加复杂点的支持多路径的”豪华版”(by flying~):
Read the rest of this entry >>