读这本书感觉真的是一个前辈给后辈的敦敦教诲,颇费苦心。
我在这里列一下这本书的精华,供大家参考。
使用接口
依赖接口,而非具体实现,可以解耦,参考Laravel的契约
性状(trait)
这个特性很有意思,名字名副其实。 假如现在有一个人,还有一辆车,车和人都要实现给自己定位的功能,显然车和人不适合从一个父类继承,那这个时候trait就排上用场了。这是一个横向复用机制,让若干不想关的类带上同样一个性状。 http://php.net/manual/zh/language.oop5.traits.php
生成器(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.generators.overview.php
闭包,命名空间,opcache
略
PSR,组件,composer
这三个东西对现代PHP意义特别重大,选择可复用组件就是选择了未来,细分领域让最专业的人去做。
过滤,验证,转义(防注入和防XSS)
输入和输出要过滤html,使用htmlentities($str, ENT_QUOTES, "UTF-8");
第二个参数开启转义单双引号,第三个参数指明字符集,都是必须开启的。
使用PHP自带过滤和验证函数
filter_input()
http://php.net/manual/zh/function.filter-input.php
filter_var()
http://php.net/manual/zh/function.filter-var.php
数据库
使用PDO和预处理
密码
使用内置的密码函数,使用bcrypt加密
password_hash()
http://php.net/manual/zh/function.password-hash.php
password_verify()
http://php.net/manual/zh/function.password-verify.php
多字节字符串
使用mb系列函数
流处理,错误和异常,自动部署,持续测试
略