注意:“省略”=“删除”
<?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的字符串类型已扩展为在模拟预处理时支持国家字符类型。这是通过以下常量完成的
这些常量通过将它们与 **PDO::PARAM_STR
** 进行按位 OR
操作来使用。
<?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中引入的group-use语法中添加尾随逗号。
<?php
use Foo\Bar\{
Foo,
Bar,
Baz,
};
Windows现在支持 proc_nice() 函数。
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) 兼容。