| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 用ArrayIterator 定制PHP数组,实现参数自动检查 -> 正文阅读 |
|
[PHP知识库]用ArrayIterator 定制PHP数组,实现参数自动检查 |
php数组很强大,有很多功能。用ArrayIterator 可添加更多的功能。 比如说在cakephp框架中,request的query参数就是一个数组,可以通过key来获取不同的参数,但是当试图获取数据中不存在的key时,并不会报错,只是返回null。 浏览器表单输入数据,传到后台后,理论上需要重新检查,参数是否有,长度,类型等等,这是个比较繁琐的工作,特别是修改比较多的时候,前后台都要改。因此,对于要求不高的内部系统来说,后台可以不用检查长度,类型等等,但是参数是否存在应该要检查。 对于表单项目多的时候,这个检查仍然很繁琐,通常用下面的办法来检查 array_key_exists('项目a',$query) isset($query['项目a']) 这个不推荐,如果项目为null的时候,会误判 对于几十上百的参数,有没有简单的办法来检查呢?于是我们想到了如果使用的时候,如果项目不存在直接报错就好了,比如下面 $query=['aaa'=>'bbb']; $test = $query['ccc']; 如果'ccc'不存在,抛出异常和事务联动,就达到了检查的目的。 要实现这个目标,需要定制php数组,继承ArrayIterator类,可以很简单实现定制数组。对于上面这个问题,代码如下
对于上面的$test = $query['ccc'];会触发ParameterException 使用方法 $query = new Parameter($this->request->query); $query就具备数组的全部功能,另外具备当获取不存在key的时候,发出异常的功能。 当然还可以实现其他的功能,比如说保存或读取数组的时候,触发其他操作等等。 下面说一下解决这个问题遇到的坑,当初准备实装SeekableIterator,?ArrayAccess,?Serializable,?Countable 这些接口来实现,后来发现即使实装了这些接口,对array_key_exists不起作用,在网上查了半天都没有解决, 网上说?ArrayAccess这个接口是无法解决这个问题,array_key_exists只能对原生的数组起作用,后台发现继承ArrayIterator类后,可以达到原生同等的效果。 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 16:12:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |