读《Modern PHP》笔记
读这本书感觉真的是一个前辈给后辈的敦敦教诲,颇费苦心。
我在这里列一下这本书的精华,供大家参考。
使用接口#
依赖接口,而非具体实现,可以解耦,参考 Laravel 的契约
性状(trait)#
这个特性很有意思,名字名副其实。
假如现在有一个人,还有一辆车,车和人都要实现给自己定位的功能,显然车和人不适合从一个父类继承,那这个时候 trait 就排上用场了。这是一个横向复用机制,让若干不想关的类带上同样一个性状。
http://php.net/manual/zh/language.oop5.tra...
生成器(yield)#
这个特性也很有用,yield 和 return 类似,区别在于 yield 只产出值,不返回值。
也可以这样理解,return 是一次性全部交付给你,yield 是承诺全部交付给你,但这次先把你现在用到的东西给你,剩下的下次你再来取。
显然,在迭代一个超大数据的时候(遍历超大数组),yield 可以先给你一个元素,不用生成整个数组,可以省内存。
上代码:
<?php
function makeRange($length){
$arr=[];
for($i=0;$i<$length;$i++) $arr[]=$i;
return $arr;
}
$results=makeRange(100000);
foreach($results as $i) echo $i.PHP_EOL;
代码 2:
<?php
function makeRange($length){
$arr=[];
for($i=0;$i<$length;$i++) yield $i;
}
foreach(makeRange(100000) as $i) echo $i.PHP_EOL;
第一个是先生成一整个数组再遍历,第二个是一边生成一边遍历。
http://php.net/manual/zh/language.generato...
闭包,命名空间,opcache#
略
PSR,组件,composer#
这三个东西对现代 PHP 意义特别重大,选择可复用组件就是选择了未来,细分领域让最专业的人去做。
过滤,验证,转义(防注入和防 XSS)#
输入和输出要过滤 html,使用 htmlentities($str, ENT_QUOTES, "UTF-8");
第二个参数开启转义单双引号,第三个参数指明字符集,都是必须开启的。
使用 PHP 自带过滤和验证函数filter_input()
http://php.net/manual/zh/function.filter-i...
filter_var()
http://php.net/manual/zh/function.filter-v...
数据库#
使用 PDO 和预处理
密码#
使用内置的密码函数,使用 bcrypt 加密
password_hash()
http://php.net/manual/zh/function.password...
password_verify()
http://php.net/manual/zh/function.password...
多字节字符串#
使用 mb 系列函数
流处理,错误和异常,自动部署,持续测试#
略
推荐文章: