广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买
PHP7.1新特性1. 可为空(Nullable)类型参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是null
#php5function($a = null){ if($a===null) { return null; } return $a;}#php7+function fun() :?string{ return null;}function fun1(?$a){ var_dump($a);}fun1(null);//nullfun1('1');//1登录后复制2. void 类型
返回值声明为 void 类型的方法要么干脆省去 return 语句。对于 void来说,NULL 不是一个合法的返回值。
function fun() :void{ echo "hello world";}登录后复制3. 类常量可见性
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}登录后复制4. iterable 伪类
这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象.
function iterator(iterable $iter){ foreach ($iter as $val) { // }}登录后复制5. 多异常捕获处理
一个catch语句块现在可以通过管道字符(_|_)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用
try { // some code} catch (FirstException | SecondException $e) { // handle first and second exceptions}登录后复制6. list支持键名
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'],];// list() stylelist("id" => $id1, "name" => $name1) = $data[0];var_dump($id1);//1登录后复制7. 字符串支持负向
$a= "hello";$a[-2];//l登录后复制8. 将callback 转闭包
Closure新增了一个静态方法,用于将callable快速地 转为一个Closure 对象。
<?phpclass Test{ public function exposeFunction() { return Closure::fromCallable([$this, 'privateFunction']); } private function privateFunction($param) { var_dump($param); }}$privFunc = (new Test)->exposeFunction();$privFunc('some value');登录后复制9. http2 服务推送
对http2服务器推送的支持现在已经被加入到 CURL 扩展
原文链接:https://cloud.tencent.com/dev...
PHP7.2新特性新的对象类型这种新的对象类型,object
, 引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。
<?phpfunction test(object $obj) : object{ return new SqlQueue();}test(new Stdclass());登录后复制允许重写抽象方法(Abstract method)
当一个抽象类继承于另外一个抽象类的时候,继承后的抽象类可以重写被继承的抽象类的抽象方法。
<?phpabstract class A{ abstract function test(string $s);}abstract class B extends A{ abstract function test($s) : int;}登录后复制使用Argon2算法生成密码散列
Argon2 已经被加入到密码散列(password hashing) API (这些函数以 password_ 开头), 以下是暴露出来的常量:
PASSWORD_ARGON2I
PASSWORD_ARGON2_DEFAULT_MEMORY_COST
PASSWORD_ARGON2_DEFAULT_TIME_COST
PASSWORD_ARGON2_DEFAULT_THERADS
允许分组命名空间的尾部逗号命名空间可以在PHP 7中使用尾随逗号进行分组引入。
function fun() :void{ echo "hello world";}0登录后复制PHP7.3新特性1 发布时间
06 Dec 2018
官网PHP7.3新特性
2 更灵活的Heredoc
和Nowdoc
语法结束标记不再需要独立一行或紧跟分号了。同时结束标记也可以使用缩进,使用缩进时doc内容的每行都会跳过相应的缩进。
function fun() :void{ echo "hello world";}1登录后复制
以上语法中,Heredoc 作为一个数组元素出现,同时结束标记没有独立在一行,还有缩进。注意定义的字符串内容,两行的缩进都被剥除了。
3 数组析构支持引用赋值演示:
function fun() :void{ echo "hello world";}2登录后复制
在为 $b 解析时,使用了引用传递,此时 $b 和 $v[1] 元素保持引用关系。
4 list结构支持引用解析。演示:
function fun() :void{ echo "hello world";}3登录后复制5 instanceof 运算符支持字面量语法
instanceof 的第一个运算数支持字面量,非对象型字面量检测的结果为 false。
function fun() :void{ echo "hello world";}4登录后复制6 支持调用时参数的尾随逗号
调用函数时,参数列表后允许跟随一个逗号。
function fun() :void{ echo "hello world";}5登录后复制
调用函数时,第二个(最后一个)参数后,增加了一个逗号是允许的。但定义是不行。
7 BC 数学函数bcscale()
函数支持获取当前BC函数所使用的 scale。
function fun() :void{ echo "hello world";}6登录后复制8 LDAP 全支持
LDAP:Lightweight Directory Access Protocol,轻量目录访问协议完全支持。
9 多字节字符串函数更新全功能的 Case-Mapping 和 Case-Folding 支持大小写不敏感字符串运算符使用 Case-Folding支持 Unicode 11长字符串支持命名捕获支持10 FastCGI 进程管理增加了如下的选项来配置FPM的Logging:(暂未翻译)
log_limitlog_bufferingdecorate_workers_output11 Argon2id 算法支持--with-password-argon2[=dir] 配置参数后。提供了对Password_*()函数中的 Argon2i 和 Argon2id 散列的支持。使用 PASSWORD_ARGON2ID 常量进行指定算法。PHP需要 libargon2 库版本要大于(等于)20161029。
12 CompileError 异常替代了一些编译错误新的 CompileError 异常被添加,ParseError继承了这个异常。目前只会影响 Token_GET_All() 在 Token_parse 模式下可能引发的编译错误。
13 性能提升据说 PHP7.3 比 PHP 7.0 快 22%。未测试,有机会压测一下。
14 废弃大小写不敏感的常量大小写不敏感的常量声明现已被废弃。将 TRUE 作为第三个参数传递给 define() 会导致一个废弃警告。大小写不敏感的使用(在读取时使用一个与声明时不同的大小写方式)也已被废弃。
15 废弃在字符串中搜索非字符串内容将一个非字符串内容传递给字符串搜索函数。 在将来所有待搜索的内容都将被视为字符串,而不是 ASCII 编码值。如果需要依赖这个特性,你应该 要么显示地进行类型转换(转为字符串),或者显示地调用 chr()。 以下是受到影响的方法:
16 新常量新常量
原文链接:https://zhuanlan.zhihu.com/p/...
PHP7.4新特性1、预加载预加载功能是指在服务启动时,未运行任何应用程序代码之前,将一组PHP文件加载到内存中,甚至可以对框架进行预加载,以提高性能。如果对预加载代码进行修改,需要重启服务。
预加载相比opcache:opcache虽然解决了重复编译问题,但opcache本身也有开销。引用Dmitry Stogov大佬的话:
Not only. The idea is to completely eliminate compilation and opcache overhead (copying from SHM to process memory and insertions into function/class tables on each request). Using this technique, we might write standard functions and classes in PHP (similar to systemlib.php in HHVM). 预加载是完全消除编译和opcache所带来的开销(从共享内存复制到进程内存,并在每个请求上插入到function/class表中),使用这种技术可以在PHP中编写标准函数和类(类似于HHVM中的systemlib.php)
想想看,其实预加载主要是提升像php-fpm这种架构形式的性能,并且会占用更多的内存资源。Benjamin Morel对预加载进行了测试。
https://github.com/composer/composer/issues/7777#issuecomment-440268416
使用方法:通过修改php.ini中的opcache.preload
来选择预加载程序。使用方法如下:
php.ini
function fun() :void{ echo "hello world";}7登录后复制
preload.php
function fun() :void{ echo "hello world";}8登录后复制
hello.php
function fun() :void{ echo "hello world";}9登录后复制
test.php
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}0登录后复制
运行
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}1登录后复制2、FFI
有时间我们再聊,先占上位置。
3、类属性的类型支持php版本<7.4:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}2登录后复制
php版本>=7.4:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}3登录后复制
一个完整的示例:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}4登录后复制
以下是支持的所有类型:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}5登录后复制4、NULL合并赋值运算符
写法:$a ??= 1 。其实就是 $a = $a ?? 1 的语法糖。
例子:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}6登录后复制5、弃用WDDX扩展
我相信大多数人和我一样并不了解wddx,wddx是一个很“古老”的数据格式,基于xml(emmm,可能我理解的不是很对,大概其就是这个意思吧)。现在都在用json,所以弃用了也罢。有兴趣的童鞋可以看一下这篇文章。
https://blog.csdn.net/guoguo1980/article/details/2436342
6、简化匿名函数此特性就是一个语法糖,相信你在别的语言中也见到过,下面是一些例子:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}7登录后复制
更多用法:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}8登录后复制
其实我个人不是很赞同php引入那么多语法糖,这使得php的语法变得越来越复杂,关于此rfc的投票,鸟哥选择了反对,包括韩天峰大佬也对此特别反对,php应该回归初心——简单高效。
7、新增mb_str_split函数mb_str_split是mbstring扩展中新增的一个函数,通过函数名就可以猜到,它是str_split函数的“增强版(多字节处理)”,它的作用和str_split一样,都是将字符串拆分成数组,只是增加了第三个参数,用于设置字符编码。
说明:
class Something{ const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4;}9登录后复制
例子:
function iterator(iterable $iter){ foreach ($iter as $val) { // }}0登录后复制8、始终可用的Hash扩展
从PHP7.4开始,Hash扩展是PHP核心扩展,无法通过--disable-hash禁用,因此它始终可用。
发表评论