语法糖 ?? 和 ?:
- $var ?? 0 相当于 isset($var) ? $var :0
- $var ?: 0 相当于$var ? $var :0
常量:PHP_SAPI
返回 web 服务器和 PHP 之间的接口类型。
可能的值有:
- fpm-fcgi
- cli
错误处理
设置错误处理器和设置报错信息是两码事。
//根据调试模式开关分别处理 if (config('debug')) { ini_set('display_errors', 'On'); error_reporting(-1); // 显示所有错误信息 } else { ini_set('display_errors', 'Off'); }
set_error_handler()
两者相互独立,互不干扰。
所以我们写代码一般都需要屏蔽所有报错,然后自己写错误处理器。
处理器则根据是否调试模式来显示不同错误信息。
PHP定界符在文件末尾
可能会报错:
syntax error, unexpected end of file, expecting variable (T_VARIABLE) or heredoc end (T_END_HEREDOC) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN)
定界符不能放在文件末尾,需要在后面加一个换行
单双引号中的 【\n】
双引号中的 \ 会被 PHP 视作转义符,而单引号中的被视为普通字符。
$v1 = '\n'; // 【\n】不会被解析成换行 $v2 = "\n"; // 【\n】会被解析成换行
其他的,如 \t 同理
require/include
require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
扩展包/扩展
PEAR – PHP扩展与应用库(the PHP Extension and Application Repository)
是一个PHP扩展及应用的代码仓库,纯粹由PHP代码编写。就是别人帮我们用PHP写了一些工具,图像处理、文件上传等,我们直接在我们项目中使用即可。
就是我们平常所说的扩展包,如 predis。
PECL – PHP扩展库(PHP Extension Community Library)
提供了一系列已知的扩展库,由C、C++等其他语言编写,以 ‘.so’ 形式出现。’.so’ 为共享库,是share object,用于动态链接。和 ‘dll’ 差不多,比 ‘PEAR’ 更快。(因为非PHP代码,需要在服务器上配置并注册到主机中)
PHP的标准扩展,可以补充实际开发中所需的功能,所有的扩展都需要安装,windows下以 ‘DLL’,linux下,需要进行编译,生成 ‘.so’ 二进制文件
就是我们平常所说的扩展,如 phpredis。
匿名函数/闭包
概念
在PHP中,匿名函数和闭包就是一个东西,但是 js 中不是。
变量作用域
如果闭包需要从上级作用域继承变量,需要用 use 引入。
PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。
一般这样传入 $this
$that = $this $myFunc = function()use($that){};
$this
闭包会自动绑定上下文的 $this,也可以手动绑定其他的对象。不过静态闭包是不能绑定 $this 的。
catch 异常
如果一个异常在某个方法中被 catch 了,那么此方法的调用方法依旧可以正常执行。否则一直向上抛出,直到被全局处理器捕获到为止。
时区
不要用 PRC,容易出错。
应该使用:
Asia/Shanghai