php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > PHP autoload实现自动加载类 - php面向对象

PHP autoload实现自动加载类 - php面向对象

分享到:
【字体:
导读:
          autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。...

PHP autoload实现自动加载类

autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。

下面是使用autoload机制加载Person类的例子,代码如下:

  1. /* autoload.php */     
  2. function __autoload($classname) {  
  3.   require_once ($classname . “class.php”);  
  4. }      
  5. $person = new Person(”Altair”, 6);  
  6. var_dump ($person);  
  7. ?>  

PHP的autoload机制的实现,要在PHP中实现自动加载类,那就要说到一个魔术方法了,__autoload();这是PHP5添加的自动加载类方法,只要定义了该函数,那么如果PHP运行到该类找不到时,就会根据__autoload的规则去寻找。

自己也规划一下,跟set_include_path和get_include_path来配合使用,使自动加载类更完善点,代码飙一下(模仿magento的),代码如下:

  1. $paths[] = BP . DS . ‘app’ . DS . ‘local’; 
  2. $paths[] = BP . DS . ‘app’ . DS . ‘base’; 
  3. $paths[] = BP . DS . ‘lib’; 
  4. $appPath = implode(PS, $paths); 
  5. set_include_path($appPath . PS . get_include_path()); 

这样就可以为PHP添加默认的类加载环境,这里只是把路径添加到了PHP环境,如果还要继续添加规则,可以再定义__autoload函数,不过我这里是对象使用的,就换了一种方法:spl_autoload_register方法,下面是自己根据magento的规则,自己弄了一套,其实跟magento差不多,代码如下:

  1. class Autoload { 
  2. /** 
  3. * 自身对象 
  4. * 
  5. */ 
  6. protected static $_instance = null; 
  7. public function __construct() { 
  8. /* 
  9. * 实例化自身 
  10. * 
  11. */ 
  12. public static function instance() { 
  13. if (null == self::$_instance) { 
  14. self::$_instance = new self(); 
  15. return self::$_instance
  16. /** 
  17. * 
  18. * 注册自动加载函数 
  19. */ 
  20. public static function register() { 
  21. spl_autoload_register(array(self::instance(), ‘autoload’)); 
  22. /* 
  23. * 
  24. * 自动加载类 
  25. */ 
  26. public function autoload($class) { 
  27. if (!is_string($class)) { 
  28. return
  29. $classFile = str_replace(‘ ‘, DS, ucwords(str_replace(‘_’, ‘ ‘, $class))); 
  30. $classFile .= ‘.php’; 
  31. return include $classFile
分享到:
PHP中MVC框架之文件入口实例详解 - php面...
PHP中MVC框架之文件入口实例详解 MVC的文件入口怎么写,完全是根据程序员的引擎设计来做,也是根据程序员喜好来做,但我们的最终目的却是通过简单的代码引入引擎来处理其它的事务,就像我们要开车一样,我们首先要点火,发动机才能发动一样。 在写入口之前我们需要考虑几个方面,URL解析方式,需要哪...
php __call方法使用说明 - php面向对象
php __call方法使用说明 本文章来给大家介绍php __call方法使用说明,有需要学习php __call方法的朋友不防进入参考,相信刚开始接触PHP的童鞋都在参考书上看到过__call这个魔法方法,而且也看到了它的应用实例!但是,等你真的开始写代码的时候,你用过它吗!?说实话,我用PHP也有一段时间了,但真...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……