源码地址:https://github.com/wilfordw/phpTutorial
我写过一个《php化整为零系列》,这篇是它们的整合版,当做目录和回忆使用,文中我大部分只列出关键词简单语法,不会详加说明,需要详细说明的点对应链接详看
本篇中也不包含版本时间轴,需要知道对应版本特性的请参考PHP 自 5.2 到 5.6 中新增的功能详解,这也是我系列的主要参考文章
本篇中没有加入PDO与MySQLi的介绍,因为后面会有关于
Laveral
系列,它有自己封装的数据库函数。所以这里就先不研究了,了解php的新特征也是为了能大致读懂Laveral
框架
还有XDebug,个人感觉过于繁琐,利用var_dump等输出已经足够调试了,而且Laveral
自带错误堆栈信息。
autoload
自动加载
老版本__autoload
新版本spl_autoload
Closures
闭包又称匿名函数,PHP增加这一特性,也是为了让代码更简洁,尤其
use
对于外部变量的引用尤其关键
Magic(魔术方法)
PHP5.3新增了一个叫做
__invoke
的魔术方法,这样在创建实例后,可以直接调用对象
__call
当要调用的方法不存在或权限不足时,会自动调用__call
方法。
__callStatic
当调用的静态方法不存在或权限不足时,会自动调用__callStatic
方法
内置Web服务器
基本用法
php -S localhost:8000
根目录php -S localhost:8000 -t magic/
路由脚本php -S localhost:8000 webServer/router.php
远程访问php -S 0.0.0.0:8000
命名空间
同文件中可多命名空间
大括号可包裹命名空间
use
命名空间与别名定义as
引用的时候需要在命名空间前加\\
php5.6以后对命名空间有一定的优化可以直接通过命名空间引用常量和函数
后期静态绑定
在继承过程中引入static关键字替代self来达到静态方法的继承目的
Heredoc&Nowdoc
//标示可以是自定义字符,前后字符一致,且不能在文章中出现 Heredoc中可以嵌入变量
<<<标示
文章
标示;
//标示可以是自定义字符,前后字符一致,且不能在文章中出现 Nowdoc中不能嵌入变量
<<<'标示'
文章
标示;
语法优化
- const 允许使用之前定义的常量进行计算、允许常量作为函数参数默认值
- 数组简写
- 可变函数参数优化
- 三元运算符简写
- 类名通过::class可以获取
- 非变量array和string也能支持下标获取
- 用foreach+list简化二位数组的迭代
- yield
Traits
trait
Trait不能直接实例化- 当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,而 trait 的方法又覆盖了基类中的方法。
- 使用
insteadof
和as
操作符来解决冲突,insteadof
是使用某个方法替代另一个,而as
是给方法取一个别名as
关键词还有另外一个用途,那就是修改方法的访问控制:- Trait 也能组合Trait,Trait中支持抽象方法、静态属性及静态方法
Phar
- 配置php.ini
phar.readonly = Off
- 打包
new Phar(包名)
$phar->buildFromDirectory(打包目录, 正则筛选);
$phar->compressFiles( Phar::GZ |PHAR::BZ2);//压缩方式
$phar->setStub( $phar->createDefaultStub(入口文件) );
- 加载
require_once 'phar:://包名/文件';