类自动载入、开发一个PSR-0的基础框架

类自动载入

最早的php项目都是通过手动include或者require来载入依赖的文件的,当项目越来越大,依赖越来越多,这样开发就很不方便了。

<?php

require 'Test1.php';
require 'Test2.php';

Test1::test();
Test2::test();

PHP5.2就提供了类的自动载入功能。

<?php


Test1::test();
Test2::test();

function __autoload($className){
    require __DIR__.'/'.$className.'.php';
}

最早的时候我通过__autoload这个魔术函数,从上面代码,我们可以看出,我们没有手动引入Test1Test2,那是因为__autoload函数帮我完成了这一步。

但是__autoload之后被废弃了。主要原因是我们一个php工程可能依赖于多个框架,如果我们每一个框架都有这个函数,就会报一个“函数重复定义”的错误。

在PHP5.3之后,官方提供了另一个函数:spl_autoload_register

<?php

spl_autoload_register('autoload1');
spl_autoload_register('autoload2');

Test1::test();
Test2::test();

function autoload1($className){
    require __DIR__.'/'.$className.'.php';
}

function autoload2($className){
    require __DIR__.'/'.$className.'.php';
}

开发一个PSR-0的基础框架

PSR-0规范:
1、命令空间必须和绝对路径一致
2、类名的首字母必须大写
3、除了入口文件外,其他.php必须只有一个类

开发符合RSR-0规范的基础框架:
1、全部使用命名空间
2、所有PHP文件必须自动载入,不能有include或require
3、单一入口
这里写图片描述

如果我们想在入口文件index.php中调用2个命令空间下的类方法

IMooc\Object::test();
App\Controller\Home\Index::test();

这个时候,怎么自动加载我们需要的类呢?Loader.php 就上场了。
Loader.php:

<?php

namespace IMooc;

class Loader
{
    static function autoload($className)
    {
        // 映射成文件的绝对路径
        $file =  BASEDIR.'/'.str_replace('\\','/',$className).'.php';
        //echo $file;

        require $file;
    }
}

所以我们只需要在入口文件引入这个Loader.php文件,并且用spl_autoload_register 函数注册,就实现了所有类的自动载入。

<?php

// 定义根目录
define('BASEDIR', __DIR__);

include BASEDIR.'/IMooc/Loader.php';
spl_autoload_register('\\IMooc\Loader::autoload');


IMooc\Object::test();
App\Controller\Home\Index::test();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值