使用laravel关于php版本那些坑。。。。
昨天要代码要上线上测试环境,作为一个苦逼的码农只好加班熬夜赶项目,终于代码敲好之后开始了上线的操作,首先服务器权限的问题搞得开始怀疑人生,在一顿猛如虎的操作后,把上线的流程梳理明白(此刻我只想说,你给我rm -rf /* 的权限,我大晚上的困得要死,跑路那肯定是行不通的)
在这个夜黑风高的夜晚,程序员小X就开始对服务器进行了操作来部署代码,一番操作后代码到了测试服务器上,进入项目里开始执行composer install
安装依赖的时候全部报错,瑟瑟发抖的我开始检查代码,开始以为自己写的项目又问题(最后是发现我们的运维在测试服务器装的php版本是7.0的。。。而laravel5.8支持的php版本是 大于等于7.1的)
第二天程序员小X告诉我们的运维大兄弟php要升级,经过大兄弟的一系列思想斗争他开始了升级PHP版本的道路,几个小时后程序员小X询问我们的运维大兄弟装好没有,这位大兄弟告诉程序员小X报了点小错,出了问题 ,… 终于php版本装好了,程序员小X 执行php-v 看到了PHP版本是7.2.9的,顿时解放了。开始重新部署代码,发现还是和昨天一样的错误,顿时心里很懵逼,再次检查php版本发现就是7.2.9的,最后在程序里输出phpinfo(); 发现版本是7.0的 。。
等等,那位大兄弟是不是忘了重启php-fpm了。。
下面说一下php7.1新增的一些功能
0.list 的方括号([])简写以及增加指定key
可以用list 来快速遍历得到数组里面的值。现在可以用[]简写了。
PHP7.1才支持:[$method, $pathInfo] = [1,2,3];
这种写法的,
php7.0一下则不支持
支持: list($method, $pathInfo) = [1,2,3];
1.可为空(Nullable)类型
function testReturn(?string $name)
{
return $name;
}
var_dump(testReturn('yangyi'));
var_dump(testReturn(null));
var_dump(testReturn2());
打印输出
$ php php71.php
string(6) "yangyi"
NULL
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14
Stack trace:
#0 php71.php(22): testReturn()
#1 {main}
thrown in php71.php on line 14
如上如:第三个报了一个致命的错误。
再来看下,函数返回值是Nullable的情况:
function testReturn3() : ?string
{
//return "abc";
//return null;
}
var_dump(testReturn3());
如果加了? 要么返回 string ,要么返回null。不能啥也不返还。会报错。
2.void返回类型
function testReturn4() : void
{
//1. 要么啥都不返还 ok
//2. 要么只return; ok
//return;
//3. return null 也会报错
//return null;
//4. return 4 会报错
//return 4;
}
3.多条件 catch
在以往的 try … catch 语句中,每个 catch 只能设定一个条件判断:
try {
// Some code...
} catch (ExceptionType1 $e) {
// 处理 ExceptionType1
} catch (ExceptionType2 $e) {
// 处理 ExceptionType2
} catch (Exception $e) {
// ...
}
4、类常量可见范围设定
之前类里面额常量用const申明,是没有可见属性的。现在把方法的可见属性移植了过来:
<?php
class ConstDemo
{
// 常量默认为 public
const PUBLIC_CONST = 0;
// 可以自定义常量的可见范围
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
// 多个常量同时声明只能有一个属性
private const FOO = 1, BAR = 2;
}
5、支持负的字符串偏移
有2个更新,1是字符串直接取,2是strpos函数第三个参数支持负数。表示从尾部取。
string变量可以直接取值,不用通过变量名,是在php5.5加入的。现在可以从尾部取: