继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

Pizzaaa
关注TA
已关注
手记 23
粉丝 77
获赞 47

半干不湿的货,你要不要。
既然写框架,目录和内容尽量有个规矩
把之前写的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;
    }
}

拿去,保证能用。

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

老哥 这个自动加载类放在那里啊

查看全部评论