PHP社区的先驱们维护四个版本,几天前多个版本号更新,PHP5.6、7版本号均有向前推进
PHP5.6新特性
1、可用表达式定义常量
2、[重要]可用...运算符定义变长参数函数、展开参数函数
3、使用 ** 进行幂运算
4、对use运算符进行function 和const引入扩展[面向对象]
5、新增一个交互调试器phpdbg
6、对一些字符编码相关函数,适用php.ini的default_charset作为默认字符集
7、可以多次打开读取php://input
8、支持大于2GB文件 上传
9、GMP支持运算符重载
10、使用hash_equals()比较字符串避免时序攻击
11、新增__debugInfo()用于var_dump()输出对象控制输出属性和值[面向对象]
12、加入gost-crypto 散列算法
13、对SSL/TLS的支持大幅度提升
14、pgsql支持异步方式连接数据库及执行查询
函数参数可变运算符
这一版本新增的...运算符可以称作语法糖,让函数变量个数弹性伸缩,更加智慧。出现的原因是函数参数个数动态可变,怎么让程序去适应而不是让开发者写很多呆萌分支穷举,例如
这个...运算符很像省略号,个人更喜欢叫做:
伸缩函数操作符、弹性函数操作符
(可以短暂思考一下设计者为什么把操作符放前面...$p,而不是后面$p...)
有两种使用情景:
1) 在定义函数时使用,表明函数将自适应接收1到多个参数。这种写法用于改进自定义函数,举个例子:
现在可以这样写
调用对比:
2) 在传入参数时使用,表明该变量将变身为1到多个参数。这种用法可用于增加系统函数调用灵活性,因为系统函数参数个数固定,例如:
求知实验室
还有一种情况,在函数定义和调用都使用...操作符,继续沿用上面的求和函数sum为其打call,我们又要用你举例子
sum函数比刚才更简单少了一行语句
注意:操作符...同时出现在函数定义和调用的情形在实际中并不多见。已经存在的系统函数从未有过申明...参数的写法,而你的自定义函数需要从现在开始创造,所以有时简单并不是实践中最有用的
最佳实践
现在就要实际运用...操作符解决实际问题,我们的目标锁定在mysqli方式操作数据库的插入操作stmt的参数绑定上,让插入更加智能同时不依赖任何MVC框架轻松打造自己的mysqli操作类
现在我们有一个学生信息表student,其中name、school字段是字符类型
在MySQL插入数据的SQL语句写法
在PHP中对应的写法
当这个表增加了两个字段性别$sex(INT)、年级$garde(VARCHAR),那么这个插入语句就要修改,而且你还要去判断哪些字段是字符串,加上'{$变量}',哪些是整型,去掉' '。当大量的工作是操作数据库时,SQL改来改去显得蠢爆了,另外如果这些值来自用户输入,还要过滤这些输入参数防止异常,也许就是——灾难的开端
最终实现插入的效果,不必考虑表结构不依赖任何框架,只要插入数据$data变化则自动匹配字段执行插入
实现这个myDB类思路是用到了MySQL的预处理语句机制和上面所说的PHP弹性操作符函数语法。PHP用mysqli扩展提供的mysqli_stmt类来对接此机制,一条预处理语句
PHP中等价的写法:
这种写法只是解决了一半问题,不用过滤输入参数,但再多传两个参数。小心翼翼的修改了$sql的字段,对应加了?号的个数,修改了绑定类型并且对应参数,这一套操作写下来天啦噜
工作中一个表可能有几十个字段,这个拼接可能要从白天肝到天黑,那么?
借助...操作符 我们立即想到了这样
然后意识到哪里不对,想到的可能是下面的写法
静似大功告成,我们发现一旦$paramList变化,$sql、$typeStr都要跟着改变,另外$paramList变量的顺序影响着$typeStr的顺序,所以有了最终的实现思路结构,由传入参数$data直接影响,只要数据表有对应字段自动匹配插入:
特别注意$paramList最终是数字索引数组:
设计思路
首先我们知道数据库中一个表的字段是有限的,每个字段的类型也认为是固定的,而且每个字段名字是唯一的,同一个表不会有两个字段叫name。向一个表插入数据,先问问这个表有哪些字段,让程序去自动匹配存在的字段拼接语句执行插入。借助预处理语句避免了过滤参数,借助...操作符增加程序弹性变得更加智能
完整的实现类代码将在后面的推送中提供
预处理语句是MySQL提供的功能
MySQL从4.1版本开始提供了一种名为预处理语句(prepared statement)的机制。它可以将整个命令向MySQL服务器发送一次,以后只有参数发生变化,MySQL服务器只需对命令的结构做一次分析就够了。这不仅大大减少了需要传输的数据量,还提高了命令的处理效率。可以用mysqli扩展模式中提供的mysqli_stmt类的对象
肝文章可比写代码更幸苦,尤其是包含技术的文章
欢迎关注留言交流,一个执着于原生PHP的自学人
领取专属 10元无门槛券
私享最新 技术干货