PHP Conference Japan 2024

新功能

新的物件類型

引進了一個新的類型,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;
}

Sodium 現在是核心擴充套件。

現代化的 Sodium 加密函式庫現在已成為 PHP 的核心擴充套件。

完整的函式參考,請參閱 Sodium 章節。

PDO 的擴充字串類型

PDO 的字串類型已擴充,可在模擬預備語句時支援國家字元類型。這是透過以下常數完成的:

這些常數的使用方式是將它們與 PDO::PARAM_STR 進行位元 `OR` 運算。

<?php

$db
->quote('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

PDO 的額外模擬預備語句除錯資訊

PDOStatement::debugDumpParams() 方法已更新,包含傳送到資料庫的 SQL,其中將顯示完整的原始查詢(包括已替換佔位符的繫結值)。此功能的加入是為了協助除錯模擬預備語句(因此僅在開啟模擬預備語句時可用)。

支援 LDAP 中的擴充操作

LDAP 擴充套件已新增 EXOP 支援。這是透過公開以下函式和常數來完成的:

Sockets 擴充套件新增了位址資訊

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,
};

在 Windows 上支援 proc_nice() 函式。

proc_nice() 函式現在在 Windows 上受到支援。

pack()unpack() 的大小端支援。

pack()unpack() 函式現在支援小端序和大端序的浮點數和雙精度浮點數。

EXIF 擴充功能的增強。

EXIF 擴充功能已更新,可支援更多格式。這表示在使用 exif_read_data() 函式解析圖像時,它們的格式特定標籤現在可以正確轉譯。以下新增的格式現已受到支援:

  • Samsung
  • DJI
  • Panasonic
  • Sony
  • Pentax
  • Minolta
  • Sigma/Foveon
  • AGFA
  • Kyocera
  • Ricoh
  • Epson

EXIF 函式 exif_read_data()exif_thumbnail() 現在支援將串流作為它們的第一個引數傳遞。

PCRE 的新功能。

  • 已新增用於設定 PCRE_DUPNAMES 的 `J` 修飾符。

SQLite3 允許寫入 BLOB。

SQLite3::openBlob() 現在允許以寫入模式開啟 BLOB 欄位;以前僅支援讀取模式。

Oracle OCI8 透明應用程式故障轉移回呼。

已新增對 Oracle 資料庫透明應用程式故障轉移 (TAF) 回呼 的支援。TAF 允許 PHP OCI8 應用程式在連線中斷時自動重新連線到預先配置的資料庫。新的 TAF 回呼支援允許 PHP 應用程式在故障轉移期間監控和控制重新連線。

ZIP 擴充功能的增強。

已新增對加密檔案的讀寫支援(需要 libzip 1.2.0)。

ZipArchive 類別現在實作了 Countable 介面。

zip:// 資料流現在接受 'password' 上下文選項。

新增註解

使用者貢獻的註解 2 則註解

3
antonfedonyuk at gmail dot com
3 年前
註解:「省略」=「移除」
<?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,沒有錯誤
?>
-4
info at ensostudio dot ru
4 年前
註解:您不能更改介面中定義的抽象方法的參數類型。
<?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) 相容。
To Top