注意:“省略” = “删除”
<?php
declare(strict_types=1);
interface ITest
{
public function run(array $input);
}
class Test implements ITest
{
public function run($input) {
return $input;
}
}
echo (new Test())->run('foo'); // 显示 foo,无错误
?>
引入了一种新的类型,object,它可用于(逆变)参数类型化和(协变)返回类型化任何对象。
<?php
function test(object $obj) : object
{
return new SplQueue();
}
test(new stdClass());
共享扩展不再需要指定其文件扩展名(对于 Unix 为 .so
,对于 Windows 为 .dll
)。这在 php.ini 文件和 dl() 函数中都已启用。
当抽象类扩展另一个抽象类时,现在可以覆盖抽象方法。
<?php
abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
// 覆盖 - 仍然保持参数的逆变和返回的协变
abstract function test($s) : int;
}
Argon2 已添加到 密码散列 API 中,其中公开了以下常量
PDO 的字符串类型已扩展为在模拟预处理时支持国家字符类型。这是通过以下常量完成的
这些常量通过按位 OR
操作与 PDO::PARAM_STR
相结合来使用
<?php
$db->quote('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);
PDOStatement::debugDumpParams() 方法已更新,包括发送到数据库的 SQL,其中将显示完整的原始查询(包括用其绑定值替换的占位符)。这已添加以帮助调试模拟预处理(因此只有在启用模拟预处理时才可用)。
LDAP 扩展已添加对 EXOP 的支持。这是通过公开以下函数和常量实现的
sockets 扩展现在能够查找地址信息,以及连接到它、绑定到它和解释它。为此添加了以下四个函数
来自覆盖方法和接口实现的参数类型现在可以省略。这仍然符合 LSP,因为参数类型是逆变的。
<?php
interface A
{
public function Test(array $input);
}
class B implements A
{
public function Test($input){} // $input 的类型省略了
}
现在可以在 PHP 7.0 中引入的分组使用语法中添加尾随逗号。
<?php
use Foo\Bar\{
Foo,
Bar,
Baz,
};
proc_nice() 函数现在在 Windows 上得到支持。
EXIF 扩展已更新以支持更大范围的格式。这意味着在使用 exif_read_data() 函数解析图像时,它们的格式特定标签现在会得到正确转换。现在支持以下新格式
EXIF 函数 exif_read_data() 和 exif_thumbnail() 现在支持将流作为其第一个参数传递。
J
修饰符。
SQLite3::openBlob() 现在允许以写入模式打开 BLOB 字段;以前只支持读取模式。
已添加对 Oracle 数据库透明应用程序故障转移 (TAF) 回调 的支持。TAF 允许 PHP OCI8 应用程序在连接断开时自动重新连接到预配置的数据库。新的 TAF 回调支持允许 PHP 应用程序在故障转移期间监视和控制重新连接。
已添加对加密存档的读写支持(需要 libzip 1.2.0)。
ZipArchive 类现在实现了 Countable 接口。
zip://
流现在接受 'password'
上下文选项。
注意:“省略” = “删除”
<?php
declare(strict_types=1);
interface ITest
{
public function run(array $input);
}
class Test implements ITest
{
public function run($input) {
return $input;
}
}
echo (new Test())->run('foo'); // 显示 foo,无错误
?>
注意:你不能更改接口中定义的抽象方法的参数类型。
<?php
abstract class AbstractAssocArray imlements ArrayAccess
{
abstract public function offsetSet($offset, $value): void;
...
}
abstract class AbstractAssocArray2 extends AbstractAssocArray
{
abstract public function offsetSet(string $offset, $value): void;
}
class AssocArray extends AbstractAssocArray2
{
public function offsetSet(string $offset, $value): void
{
$this->{$offset} = $value;
}
}
?>
这将抛出致命错误:AbstractAssocArray::offsetSet(string $offset, $value): void 的声明必须与 AbstractAssocArrayAccess::offsetSet($offset, $value) 兼容。