关于glibc/iconv漏洞的声明

新功能

PHP内核

键入的属性

类属性现在支持类型声明。

<?php(电话)
用户{
公众的
整数$id;
公众的
字符串$名称;
}
?>
上述示例将强制执行$user->id只能是分配整数值和$用户->名称可以仅被分配一串值。

箭头函数

箭头函数提供定义函数的简写语法具有隐式的by-value范围绑定。

<?php(电话)
$系数
=10;
$个=阵列_贴图(fn)(n美元) =>n美元*$系数, [124]);
//$nums=数组(10、20、30、40);
?>

有限返回类型协方差和参数类型逆变

下面的代码现在可以工作了:

<?php(电话)
A类{}
B类延伸A类{}

生产商{
公共职能
方法():A类{}
}
儿童制片人延伸生产商{
公共职能
方法():B类{}
}
?>
仅当使用自动加载时,才提供完全差异支持。内部只有单个文件的非循环类型引用是可能的,因为类需要在被引用之前可用。

空合并赋值运算符

<?php(电话)
$数组
[“密钥”] ??=计算默认值();
//大致相当于
if(!is设置($数组[“密钥”])) {
$数组[“密钥”] =计算默认值();
}
?>

打开阵列内部的包装

<?php(电话)
$个部件
= [“苹果”“梨子”];
$个水果= [“香蕉”“橙色”, ...$个部件“西瓜”];
//[‘香蕉’、‘橘子’、‘苹果’、‘梨’、‘西瓜’];
?>

数字文字分隔符

数字文字可以在数字之间包含下划线。

<?php(电话)
6.674_083e-11号
;//浮子
299_792_458;//十进制
0xCAFE_F00D;//十六进制
0b0101_1111;//二进制
?>

弱引用

弱引用允许程序员保留对对象的引用这并不能阻止物体被摧毁。

允许__toString()中的异常

引发异常__toString()现在是允许的。此前,这导致了一个致命错误。现有的字符串转换中可恢复的致命错误已转换为错误例外情况。

曲线

CURL文件现在还支持流包装器如果扩展名是根据libcurl>=7.56.0构建的,则转换为普通文件名。

过滤器

这个过滤器_校准_浮动过滤器现在支持最小范围(_R)最大范围(_R)选项,语义与过滤器_校准_内部.

外国金融机构

FFI是一种新的扩展,它提供了一种简单的调用方式本机函数、访问本机变量和创建/访问C库中定义的数据结构。

GD公司

添加了IMG_过滤器_过滤器图像过滤器对图像应用散射过滤器。

搞砸

补充crc32c型使用Castagnoli多项式进行散列。此CRC32变体由存储系统使用,例如iSCSI、SCTP、Btrfs和ext4。

多字节字符串

添加了mb_str_split()功能,它提供功能与字符串拆分(),但正在运行基于代码点而不是字节。

OPcache(OPcache)

支持预加载代码已添加。

正则表达式(Perl-Compatible)

这个preg_replace_callback()preg_replace_callback_array()函数现在接受附加的旗帜参数,支持PREG_OFFSET_CAPTURE(预览_偏移_捕获)PREG_UNMATCHED_AS_NULL预览旗帜。这会影响传递给回调函数的匹配数组的格式。

项目开发办公室

现在可以将用户名和密码指定为的PDO DSN的一部分mysql、mssql、sybase、dblib、firebird和oci驱动程序。在此之前只有pgsql驱动程序支持。如果指定了用户名/密码在构造函数和DSN中,构造函数优先。

现在可以在SQL查询中转义问号以避免它们被解释为参数占位符。写作??允许向数据库发送单个问号,例如使用PostgreSQL JSON密钥存在(?)操作员。

PDO_OCI公司

PDO语句::getColumnMeta()现在可用。

PDO_SQL岩

PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)允许检查语句是否为只读,即是否不修改数据库。

PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES,true)允许在中使用SQLite3扩展结果代码PDO::errorInfo()PDO语句::errorInfo().

SQLite3公司

补充SQLite3::lastExtendedErrorCode()获取最后一个扩展结果代码。

补充SQLite3::enableExtendedResultCodes($enable=true)这将使SQLite3::lastErrorCode()返回扩展结果代码。

标准

带标记名数组的strip_tags()

条带标签()现在还接受允许的标记数组:而不是strip_tags($str,“<a><p>”)你现在可以写了strip_tags($str,['a','p']).

自定义对象序列化

添加了一种新的自定义对象序列化机制使用了两种新的魔术方法:__序列化__取消序列化.

<?php(电话)
//返回包含对象所有必要状态的数组。
公共职能__序列化():数组;

//从给定的数据数组恢复对象状态。
公共职能__取消序列化(数组$数据):空隙;
?>
新的序列化机制取代可序列化接口,它将在将来被弃用。

不带参数的数组合并函数

数组_合并()数组_合并_递归()现在可以在不带任何参数的情况下调用,在这种情况下,它们将返回一个空数组。这与扩散算子结合使用很有用,例如。array_merge(…$数组).

proc_open()功能

proc_open()现在接受数组而不是命令的字符串。在这种情况下,将打开流程直接(不经过shell),PHP将负责任何必要的论点都在逃避。

<?php(电话)
进程打开(_O)
([“php”“-r”'echo“Hello World\n”;'],$描述符$管道);
?>

proc_open()现在支持重定向无效描述符。

<?php(电话)
//如外壳上的2>&1
进程打开(_O)($cmd(美元), [1=> [“管道”“w”],2=> [“重定向”1]],$管道);
//比如shell上的2>/dev/null或2>nul
进程打开(_O)($cmd(美元), [1=> [“管道”“w”],2=> [“null”]],$管道);
?>

无libar的argon2i(d)

密码_哈希()现在有了argon2i和argon2id实现当PHP在没有libar的情况下构建时,从钠延伸。

添加注释

用户贡献的笔记2条注释

下雨
4年前
应该注意,内部类型化属性从未初始化为默认的null。当然,除非您自己将其初始化为空。这就是为什么如果你试图在初始化之前访问它们,你总是会遇到这个错误。

**在初始化之前,不能访问类型化属性foo::$bar**

<?php(电话)
用户
{
公众的
$id(美元);
公众的
字符串$name;//类型化属性(未初始化)
公众?字符串$age=无效;//类型化属性(已初始化)
}

$用户=新用户;
变量转储(完整(_N)($用户->身份证件));//布尔(true)
变量转储(is_完整($用户->名称));//PHP致命错误:在初始化之前,不能访问类型化属性User::$name
变量转储(完整(_N)($用户->年龄));//布尔(true)
?>

另一件值得注意的事情是,不可能将类型为object的属性初始化为null以外的任何值。因为属性的计算发生在编译时,而对象实例化发生在运行时。最后一点,由于可调用类型的上下文相关行为,它不受支持。
wow-apps.pro公司
4年前
<?php(电话)

//如何获取属性类型?例如,用于测试:


{
私有的
整数$num;
私有的
bool$为正值;
私有的
$张纸币;
}

$反射=新\反射类(::类);
$class属性=$反射->获取属性(\Reflection属性::IS_隐私);
foreach公司(
$class属性作为$class属性) {
变量转储((字符串)$class属性->获取类型());
}

/**
*结果:
*“整数”
*“bool”(嘘声)
* ""
*/
到顶部