做个web框架(12)——请求对象TFRequest(二)实现请求对象【20201107】

发表于 2020-11-07 09:49:55
阅读 27

介绍

介绍

上一课大家已经跟着福哥了解了用户请求的基本知识了,今天我们就来把这个用户请求对象的功能实现了。因为用户请求包含很多输入数据,我们需要对每一个数据进行实体化,也就是说为它们建立独立的实体对象。在PHP语言里面这些输入数据都是以全局数组形式存在的,所以我们在建立这些实体对象的时候又可以使用相同的基类。基于这些分析结果,福哥会建立这些数据对象给请求对象TFRequest调用。

代码

TFVars

filter

private function filter($value, bool $deFilter=false){
    if(!$deFilter){

        return htmlspecialchars($value);
    }
    else{

        return htmlspecialchars_decode($value);
    }
}

get

public function get(string $key, bool $deFilter=false):string {
    if(isset($this->items[$key])){
        if(!$deFilter){

            return $this->items[$key];
        }
        else{

            return $this->filter($this->items[$key]);
        }
    }

    return null;
}

set

public function set(string $key, string $value){
    if($this->readOnly){

        return false;
    }

    $this->items[$key] = $this->filter($value);

    return true;
}

TFGet

继承TFVars

TFPost

继承TFVars

TFServer

继承TFVars

TFCookie

继承TFVars

TFFiles

继承TFVars

TFRequest

属性

public TFGet $get;
public TFPost $post;
public TFServer $server;
public TFCookie $cookie;
public TFSession $session;
public TFFiles $files;

讲解

TFVars

filter

这个方法会对输入变量进行htmlspecialchars处理,也就是说将特殊字符转换成html实体,举例:在网页上显示“<”字符,就在网页里面写上“&lt;”,而“>”字符对应的是“&gt;”,后面这些以“&”开通并且以“;”结尾的符号就是html实体了。

这个方法除了可以将普通字符转换为html实体,也可以将html实体转换回普通字符。

get

这个方法可以将指定键对于的值返回回来。

set

这个方法可以对指定键的值进行覆盖,也就是说可以修改指定键的值。

TFGet

这个对象继承自TFVars,默认数据来自全局数组“$_GET”。

TFPost

这个对象继承自TFVars,默认数据来自全局数组“$_POST”。

TFServer

这个对象继承自TFVars,默认数据来自全局数组“$_SERVER”。

TFFiles

这个对象继承自TFVars,默认数据来自全局数组“$_FILES”。

TFRequest

属性

可以看到我们将前面建立的输入数据对象在TFRequest对象里面都设置了一个对于的属性对于它们的对象实例,也就是说通过这些属性就可以访问任何输入数据了。

之所以不提倡在代码里面直接使用“$_GET”和“$_POST”之类的全局数组,是因为这些输入数据库有可能会被有意无意地携带一些“威胁”,如果我们不将这些数据进行过滤处理就有可能被黑客利用通过这些输入数据对我们的系统进行攻击。

87801869284552c6.jpg

总结

今天福哥带着大家进一步实现了请求对象TFRequest的功能,为请求对象增加了六个输入数据的实体对象,通过这些实体对象,TFPHP的TFRequest就可以方便且安全地调用来自用户请求的输入数据了。

下一课我们会开始讲解关于响应对象TFResponse的功能,这个响应对象实现之后我们就可以开始着手开发基于TFPHP框架的项目了。

P.S.

福哥说明一下,童鞋们可能发现了,福哥并没有提供TFPHP各个模块里面的对象的全部代码,而是提供了主要函数的代码,为什么不直接粘贴全部对象定义的代码呢?

这个是因为福哥出于一些安全考虑,避免麻烦不得已而为之。

TFPHP是童鞋们和福哥一块儿设计、一块儿敲代码敲出来的web框架,所以福哥今后发布TFPHP框架的时候一定是免费的。

但是这个TFPHP的所有权必须是我们的,只有我们对TFPHP有着所有权,我们才能保证它是免费的。