首页 > 编程 > PHP > 正文

构建PHP MVC框架2.类库加载

2020-03-22 17:19:37
字体:
来源:转载
供稿:网友
  • 一个MVC框架最核心的部分可以称之为是一个完善的类库自动加载机制。这样就可以写入一些核心类库,或者给开发者提供自由扩展框架的接口。

    类库的加载可以通过两种方式来实现,这两种方式,依赖于PHP提供的两种自动加载方式。

    1.__autoload()函数
    只要在你的框架程序的中实现__autoload,然后,找到相关的html' target='_blank'>class类文件,然后include进来就可以了。
    这个函数的说明如下:

    void __autoload ( string $class )

    参数$class就是需要找的类的名字。比如,当你new一个“对象”的时候,这个参数就是“对象”。在这个函数里需要找到这个类文件的路径,究竟在哪里,这个可以由框架的开发者来定义。

    这里我们给出一种简单的实现方式,在当前框架运行的网站根目录的lib目录里,堆放了一堆的类名.class.php文件。这样就给出一种__autoload的一种实现。


    function __autoload($class){     if(file_exist('lib/'.$class.'.class.php')) include 'lib/' . $class  . '.class.php';  }

    2.spl自动加载机制。

    以上的__autoload基本上可以实现自动加载类文件,但是,太过单一化,只能有一个回调函数,这样就对程序的逻辑有了诸多的限制。其实php本身提供了另外一套回调控制相当不错的自动加载机制。

    这些东西集中在spl_autoload系列函数当中。
    spl_autoload_register,spl_autoload_unregister一对注册与反注册函数,构成了回调函数列表的增删,这样就可以维护一个动态的列表。他们拥有相同的参数,都是一个回调对象,回调对象有三种形式a 一个字符串,会被当成一个函数 b 一个数组,第一个元素是对象,第二个元素是字符串,注册的回调就是这个对象的某个方法,第二个参数指方法名 c一个数组,两个元素都是字符串 注册回调的就是这个类的某个静态方法。

    spl_autoload_functions 返回当前注册的回调。

    同样的实现1中的机制,简单代码如下:


    #先定义回调函数 function my_autoload_register($class){      if(file_exist('lib/'.$class.'.class.php')) include 'lib/' . $class  . '.class.php';  } spl_autoload_register('my_autoload_register');

    注:以上两种方法是不能并存的,即当使用了spl_autoload_register,__autoload函数将不会被自动调用,解决办法,就是把他注册进去
    spl_autoload_register(‘__autoload’);

    相比而言,2中的方法更为灵活,不管是框架开发者,还是框架使用者,都可以自由的添加回调函数到类库的自动加载,然后,加载自己的类库文件。

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表