[李景山php]每天TP5-20170202|thinkphp5-Request.php-5

本文介绍了PHP框架中头部信息的设置与获取方法,以及如何处理输入数据并应用过滤规则。涉及的技术包括HTTP头部管理、数据过滤及类型转换。
    /**
     * 设置或者获取当前的Header
     * @access public
     * @param string|array  $name header名称
     * @param string        $default 默认值
     * @return string
     */
    public function header($name = '', $default = null)
    {// 设置 或者 获取 当前的 头信息
        if (empty($this->header)) {// 如果头信息为空
            $header = [];// 准备一个空的头信息容器,
            $server = $this->server ?: $_SERVER;// 去检查一下server 的情况
            foreach ($server as $key => $val) {// 把里面的每一个 东西都拿出来
                if (0 === strpos($key, 'HTTP_')) {// 进行对比
                    $key          = str_replace('_', '-', strtolower(substr($key, 5)));// 替换 变成 头信息
                    $header[$key] = $val;// 存放到头信息 仓库
                }
            }
            if (isset($server['CONTENT_TYPE'])) {// 如果通过 服务器 设置了 内容仓库
                $header['content-type'] = $server['CONTENT_TYPE'];// 出发的东西就要用这个
            }
            if (isset($server['CONTENT_LENGTH'])) {// 如果设置了 对应的
                $header['content-length'] = $server['CONTENT_LENGTH'];// 长度
            }
            $this->header = array_change_key_case($header);// 数组改变 key 值 大小写
        }
        if (is_array($name)) {// 如果是 拼合后 返回
            return $this->header = array_merge($this->header, $name);
        }
        if ('' === $name) {// 如果 是空
            return $this->header;// 返回 头信息
        }
        $name = str_replace('_', '-', strtolower($name));// 删除 当前的 东西
        return isset($this->header[$name]) ? $this->header[$name] : $default;// 返回是否设置的东西
    }

    /**
     * 获取变量 支持过滤和默认值
     * @param array         $data 数据源
     * @param string|false  $name 字段名
     * @param mixed         $default 默认值
     * @param string|array  $filter 过滤函数
     * @return mixed
     */
    public function input($data = [], $name = '', $default = null, $filter = null)
    {// 如果 输入 跟 输出 获取输入数据, 支持 过滤 和 默认值
        if (false === $name) {// 获取信息 如果 为false 那么 返回 数据
            // 获取原始数据
            return $data;
        }
        $name = (string) $name;// 如果 有 key值
        if ('' != $name) {// 如果 key 不为空,解析 name
            // 解析name
            if (strpos($name, '/')) {// 如果 str 有这个格式
                list($name, $type) = explode('/', $name);// 如果 列表
            } else {// 否则 默认的类型 是 s
                $type = 's';
            }
            // 按.拆分成多维数组进行判断
            foreach (explode('.', $name) as $val) {// 遍历另外一种方式
                if (isset($data[$val])) {// 如果 设置
                    $data = $data[$val];
                } else {// 默认值
                    // 无输入数据,返回默认值
                    return $default;
                }
            }
            if (is_object($data)) {// 如果是对象,直接返回
                return $data;
            }
        }// 返回数据

        // 解析过滤器
        $filter = $filter ?: $this->filter;// 获取 解析器

        if (is_string($filter)) {// 如果字符串
            $filter = explode(',', $filter);
        } else {// 否则 数组
            $filter = (array) $filter;
        }
        $filter[] = $default;// 添加一个默认的,哈哈,反正要有一个才行
        if (is_array($data)) {// 如果是 数据
            array_walk_recursive($data, [$this, 'filterValue'], $filter);// 遍历资源,并且强制转换
            reset($data);// 重置数据
        } else {// 发送更多的数据
            $this->filterValue($data, $name, $filter);
        }

        if (isset($type) && $data !== $default) {// 如果设置了 类型 并且 类型 不同与 默认的
            // 强制类型转换
            $this->typeCast($data, $type);// 首先先是强制转换 数据
        }
        return $data;// 返回数据
    }

    /**
     * 设置或获取当前的过滤规则
     * @param mixed $filter 过滤规则
     * @return mixed
     */
    public function filter($filter = null)
    {
        if (is_null($filter)) {
            return $this->filter;
        } else {
            $this->filter = $filter;
        }
    }// 过滤器设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值