PHP Conference Japan 2024

其他變更

對包含無效字串的算術運算發出通知和警告

當使用期望數字的運算子 (+ - * / ** % << >> | & ^) 或其對應的賦值運算子強制轉換無效字串時,引入了新的 E_WARNINGE_NOTICE 錯誤。當字串以數值開頭但包含尾隨非數值字元時,會發出 E_NOTICE;當字串不包含數值時,會發出 E_WARNING

<?php
'1b' + 'something';

上述範例會輸出

Notice: A non well formed numeric value encountered in %s on line %d
Warning: A non-numeric value encountered in %s on line %d

八進位溢位跳出警告

先前,三個八位元組的八進位字串跳脫序列會無聲地溢位。現在,它們仍然會溢位,但會發出 E_WARNING 警告。

<?php
var_dump
("\500");

上述範例會輸出

Warning: Octal escape sequence overflow \500 is greater than \377 in %s on line %d
string(1) "@"

修正 $this 的不一致性

雖然 $this 在 PHP 中被視為特殊變數,但它缺乏適當的檢查以確保它不會被用作變數名稱或重新賦值。現在已修正此問題,以確保 $this 不能是使用者定義的變數、重新賦值給不同的值或被全局化。

不使用雜湊的 Session ID 生成

Session ID 在生成時將不再進行雜湊處理。此變更將移除以下四個 ini 設定:

  • session.entropy_file
  • session.entropy_length
  • session.hash_function
  • session.hash_bits_per_character

並新增以下兩個 ini 設定:

  • session.sid_length - 定義 Session ID 的長度,預設為 32 個字元以確保向下相容性。
  • session.sid_bits_per_character - 定義每個字元儲存的位元數(即增加 Session ID 中可使用的字元範圍),預設為 4 以確保向下相容性。

INI 檔案處理的變更

precision

如果值設為 -1,則使用 dtoa 模式 0。預設值仍然是 14。

serialize_precision

如果值設為 -1,則使用 dtoa 模式 0。現在預設使用值 -1。

gd.jpeg_ignore_warning

php.ini 設定的預設值已變更為 1,因此預設會忽略 libjpeg 警告。

opcache.enable_cli

php.ini 設定的預設值在 PHP 7.1.2 中已變更為 1(啟用),並在 PHP 7.1.7 中改回 0(停用)。

僅使用 CSPRNG 生成 Session ID

Session ID 現在將僅使用 CSPRNG 生成。

允許 null 時,提供更具參考價值的 TypeError 訊息

用於 arg_info 類型檢查的 TypeError 例外現在將提供更具參考價值的錯誤訊息。如果參數類型或返回類型接受 null(透過將預設值設為 null 或為可為 null 的類型),則錯誤訊息現在將會提到這一點,並顯示「必須是 ... 或 null」或「必須 ... 或為 null」的訊息。

新增註解

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

Ta7To7
6 年前
請注意,對字串使用遞增/遞減運算子是合法的
<?php
$str
= "";
echo ++
$str; // 輸出:1
?>
To Top