註解:「省略」=「移除」
<?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 引入的群組使用語法中添加尾隨逗號。
<?php
use Foo\Bar\{
Foo,
Bar,
Baz,
};
proc_nice() 函式現在在 Windows 上受到支援。
EXIF 擴充功能已更新,可支援更多格式。這表示在使用 exif_read_data() 函式解析圖像時,它們的格式特定標籤現在可以正確轉譯。以下新增的格式現已受到支援:
EXIF 函式 exif_read_data() 和 exif_thumbnail() 現在支援將串流作為它們的第一個引數傳遞。
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) 相容。