php类文件的自动加载机制

<?php
    
    导语:
    在实际项目中,如果一个类在多个脚本中都需要使用的话,可以将这个类的定义代码,单独的放到一个文件内。
    当需要的时候,将文件加载进来即可。

    目标:
    在加载类文件的时候,我们希望的情况是,首先,不需要手动加载该类文件(自动加载)。
    其次,按需加载(需要哪个类文件就加载哪个类文件,不需要的时候不加载)


    /·······················································/ 
    如何实现类文件的自动加载:

    第一步:
    一般的我们会将类文件的文件名,命名为:类名.class.php

    第二步:
    我们需要借助__autoload()方法来实现类文件自动加载。
    在php执行的过程中,如果发现需要使用一个类,并且此时当前脚本并没有这个类的定义代码。
    那么php会自动调用__autoload()函数。并且在调用的同时,给该函数传递一个参数。参数就是当前需要的类的类名。
    但是,系统只负责调用该方法,并不负责定义这个函数,所以需要我们去完善函数体。


    $obj = new A;
    function __autoload($class_name){
        if(is_file("./$class_name.class.php")){
            include_once("./$class_name.class.php");
        }
    }

    /·······················································/ 
    随着项目的扩展,我们可能需要注册其他自定义的自动加载函数。

    第一步:定义一个可以加载类文件的普通函数
    例如:
    function my_autoload($class_name){
        if(is_file("./$class_name.class.php")){
            include_once("./$class_name.class.php");
        }
    }

    第二步:将该函数注册成自动加载函数
    这一步,我们需要借助另外一个系统函数来实现。
    语法格式为:spl_autoload_register('函数名')
    例如:
    spl_autoload_register('my_autoload');

    注册其他自定义自动加载函数,有几点需要注意的地方:
    第一:注册一定要发生在需要某个类之前
    第二:可以注册多个其他自定义自动加载函数
    第三:一旦注册其他自定义的自动加载函数之后,系统的自动加载函数__autolaod将失效
    第四:如果还需要__autoload起作用,可以像注册其他普通函数一样注册它


    /·······················································/ 
    在面向对象的编程风格中,我们一般会将用户自定义的自动加载函数封装到一个类中!

    静态方法注册:
    spl_autoload_register(array('类名','方法名'));   
    或者:
    spl_autoload_register('类名::静态方法名');   

    例如:
    class Common{
        public static function my_autoload($class_name){
            if(is_file("./$class_name.class.php")){
                include_once("./$class_name.class.php");
            }        
        }
    }

    spl_autoload_register(array('Common','my_autoload'));
    或者:
    spl_autoload_register('Common::my_autoload');


    非静态方法注册:
    spl_autoload_register(array(对象变量,'方法名'));

    例如:
    class Common{
        public function my_autoload($class_name){
            if(is_file("./$class_name.class.php")){
                include_once("./$class_name.class.php");
            }        
        }
    }

    $obj = new Common;
    spl_autoload_register(array($obj, 'my_autoloads'));




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值