手记

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

再继续。
大家看到了,我的App.php文件是用了单例模式。这么做有一个好处就是不会被大量的实例化,能节省内存。也是为了能满足我之前立的FLAG。

继续撸代码

我希望尽可能少的用全局变量,比如$_GET,$_POST之类的。反正SWOOLE已经提供了很好的方法,为什么不用它呢,咱们接下来先搞搞$request。
创建文件 frame/Lib/Request.php,贴

<?php
namespace Piz;
class Request
{
    /**
     * 对象实例
     * @var object
     */
    private static $instance;
    /**
     * 为了防止在请求的过程发生一些不愉快事情,全给它private
     * @var array
     */
    private $server;
    private $header;
    private $request;
    private $post;
    private $get;
    private $cookie;
    private $files;
    private $tmpfiles;
    private $rawContent;
    private $getData;

    private function __construct (){}

    public static function get_instance(){
        if(is_null (self::$instance)){
            self::$instance = new self();
        }
        return self::$instance;
    }
    //先拿到$request,然后挨个给它变身
    public function set($request){
        $this->server       = $request->server;
        $this->header       = $request->header;
        $this->tmpfiles     = $request->tmpfiles;
        $this->request      = $request->request ;
        $this->cookie       = $request->cookie ;
        $this->get          = $request->get ;
        $this->files        = $request->files ;
        $this->post         = $request->post ;
        $this->rawContent   = $request->rawContent();
        $this->getData      = $request->getData();
    }
    /*
    // 以上变身方法也可以用魔术方法,我写了,可就是不想用它。
    public function __set($name,$value){
        $this->$name = $value;
    }
    */
    //变身后它就不是废物了,那就得让小伙伴们能使用它,这里使用了这么一个魔术方法。
    public function __get($name){
        return $this->$name;
    }
}

试一下它好不好使。直接改frame/Lib/App.php代码

public function http($request,$response){
        $req = Request::get_instance ();
        $req->set($request);
        $response->end(var_export ($req->server,TRUE));
    }

运行start.php, 浏览器查看

很无奈,它成功了。。

Request类也是用了单例模式,在这里说一下,用单例模式的目的就是希望在后续的开发中,可以很少限制的随便调用。并且,后续的框架开发中,我会尽可能的用单例模式,没别的原因,就是需要。

3人推荐
随时随地看视频
慕课网APP

热门评论

??????????

查看全部评论