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

释放双眼,带上耳机,听听看~!

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

拿去,保证能用。

【转自慕课】https://www.imooc.com

PHP

yii2配置词典 / 请求配置(request)你知多少? -- 上篇

2022-3-3 10:10:25

PHP

如何管理多台服务器上的PHP定时任务-PPGo_Job

2022-3-3 10:12:39

搜索