• 欢迎来到我的博客
  • [email protected]

PHP 踩坑记录 + 小本本

学习笔记 tianlan 1年前 (2020-04-25) 602次浏览 0个评论 扫描二维码
文章目录[隐藏]

PHP不支持逗号表达式

不支持以下写法

$a = 1;
$b = 2;
$c = 3;
$test = $a+$b,$b+$c; //不支持,会报错

错误相关

error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别?

后者的权限大于前者,后者是OFF的话,前者就算是E-ALL也没用。

所以我们一般这样用:

// 显示所有错误信息
ini_set('display_errors', 'On');
error_reporting(-1);

 

语法糖 ?? 和 ?:

  • $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

 

 

PHP 踩坑记录 + 小本本


天蓝, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 踩坑记录 + 小本本
喜欢 (0)
[[email protected]]
分享 (0)

您必须 登录 才能发表评论!