PHP自动加载class文件的方案
2010-08-25 16:31
609 查看
PHP5中有一个很方便的__autoload的魔术函数,PHP Manual中的示例如下:
算是很方便的一个函数,然而有一个缺陷就是没有名称空间,大量的class不得不放在一个目录下面,才可以用这个自动加载php的魔术函数,如果class文件要放在不同的目录里面,这个自动载入就无能为力了。为了解决这个问题,自己写了一个loadClass函数实现类似功能,代码如下:
DIR_APP/model/test.php:
如此一来,就可以方便的加载在不同的目录里面的(缺点就是要打完整的”名称空间”)
class的名称定义遵循PEAR标准用下划线_进行分隔
更加复杂点的支持多路径的”豪华版”(by flying~):
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!~"; } }
如此一来,就可以方便的加载在不同的目录里面的(缺点就是要打完整的”名称空间”)
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~):
class Vifix_Loader { private static $paths = array(); public function addPath($path) { self::$paths[] = $path; } public function load($className) { $classPath = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; foreach (self::$paths as $path) { if (file_exists($path . $classPath)) { require $path . $classPath; } } } } spl_autoload_register(array('Vifix_Loader', 'load')); Vifix_Loader::addPath(dirname(__FILE__)); // ...
相关文章推荐
- php入门篇------->PHPCMS 入口文件,自动加载系统函数和URL规则
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- tp3.2不能自动加载公共配置文件config.php
- 访问项目时,不能自动加载index.php文件
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- tp3.2不能自动加载公共配置文件config.php
- php自动加载文件
- tomcat自动加载改变的class文件(无需重启tomcat)
- php自动加载文件
- 详解PHP文件的自动加载(autoloading)
- 关于不重启Tomcat自动加载改变的class文件
- 解析PHP入口文件的自动加载功能
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- 关于不重启Tomcat自动加载改变的class文件
- PHP ThinkPHP 3.2.3 自动加载公共函数文件的方法
- PHP 命名空间以及自动加载(自动调用的函数,来include文件)
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- php composer 在laravel中自动加载autoload_class.php中的配置
- 服务器会自动加载index.php文件和一些自己的常用疑问