命名空间和自动加载

首先 new一个类的时候会触发以下系统函数调用。

function instance($className)
{
    // 如果类存在则返回其实例
    if (class_exists($className, false)) {
        return new $className();
    }
    // 查看 autoload 函数是否被用户定义
    if (function_exists('__autoload')) {
        __autoload($className); // 最后一次引入的机会
    }
    // 再次检查类是否存在
    if (class_exists($className, false)) {
        return new $className();
    } else { 
    // 不存在,抛出异常
        throw new Exception('Class '.$className.' Not Found');
    }
}

首先介绍参数$className的值。

1:new app\backend\Goods();   $className = 'app\backend\Goods';

2: use app\backend\Goods;  new Goods();   $className = 'app\backend\Goods';

理解这些就可以设计一个简单的根据命名空间来加载类的自动加载函数

function __autoload($className)
{
    //为了兼容windows和linux的路径分割符
    $className = str_replace('\\', '/', $className);
    // 根据类名确定文件名
    $file =  $className . '.php';
    // 引入PHP文件
    if (file_exists($file)) {
        include $file; 
    }
}

当然命名空间也要符合规范(路径目录名+类名(类名和文件名一致))

结尾分享一款磁力搜索神器,wx小程序搜索磁力种子王,海量资源,真的好用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值