为了账号安全,请及时绑定邮箱和手机立即绑定

SWOOLE 从入门到放弃之写个小框架(四)

标签:
PHP

半干不湿的货,你要不要。
既然写框架,目录和内容尽量有个规矩
把之前写的HTTP DEMO 文件,重命名Server.php移到 frame/Lib/下

目录结构

frame
   |-Lib    
       |-Server.php

在根目录上新建一个启动文件 start.php

<?php
require "./frame/Lib/Server.php";

可以试运行一下

root@localhost:/piz$ php start.php 
服务启动  http://0.0.0.0:9501

启动成功。
接下来,写个加载器。
先确定命名空间 namespace,在第一篇内容里确定了项目目录

E:/wwwroot/
|-piz 项目目录

那咱就用piz命名框架,为了好看些就首字母大写 Piz
我参考ThinkPHP的加载器并做了个简化,目的是能满足我们的需求就行,以下加载器的代码。

<?php
/**
 * 加载器
 */
namespace Piz;

class Loader
{
    // 类名映射
    protected static $map = [] ;
    //命名空间映射
    protected static $namespaces = [] ;

    public static function register(){
        spl_autoload_register ('\\Piz\\Loader::autoload',true , true );
        self::addNamespace ('Piz',__DIR__.'/');
    }
    public static function autoload($class){
        if($file = self::find($class)){
            include $file;
            return true;
        }
    }

    //查找文件,并映射到$map
    private static function find($class){
        if(!empty(self::$map[$class])){   //如果已存在就直接返回
            return self::$map[$class];
        }
        //下面就是找啊找。。
        $classes = array_filter(explode ('\\',$class ));
        $namespace = array_shift ($classes);
        $logicalPath  = join (DIRECTORY_SEPARATOR ,$classes) .'.php';

        if(isset(self::$namespaces[$namespace]) ){  // 如果命名空间已注册,那就往下找。
            $dir = self::$namespaces[$namespace] ;
            if(is_file ($path = $dir.$logicalPath)){
                self::$map[$class] = $path;
                return $path;
            }

            echo "{$dir}{$logicalPath} 找啊找,找不到,你说气人不气人",PHP_EOL;
        }
        return  false;
    }

    // 注册 类
    public static function addMap($class , $map = ''){
        self::$map[$class] = $map ;
    }
    // 注册命名空间
    public static function addNamespace($namespace,$path=''){
        self::$namespaces[$namespace] = rtrim($path,'/').DIRECTORY_SEPARATOR;
    }
}

拿去,保证能用。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消