PHP Conference Japan 2024

__PHP_Incomplete_Class 類別

(PHP 4 >=4.0.1, PHP 5, PHP 7, PHP 8)

簡介

unserialize() 在嘗試反序列化未定義的類別或未列在 unserialize()options 陣列之 allowed_classes 中的類別時建立。

在 PHP 7.2.0 之前,對 __PHP_Incomplete_Class 類別使用 is_object() 會傳回 false。從 PHP 7.2.0 開始,會傳回 true

類別概要

final class __PHP_Incomplete_Class {
}

此類別沒有預設的屬性或方法。當由 unserialize() 建立時,除了所有反序列化的屬性和值之外,物件還將擁有一個 __PHP_Incomplete_Class_Name 屬性,其中將包含反序列化類別的名稱。

更新日誌

版本 說明
8.0.0 此類別現在是 final(最終)的。

範例

範例 #1 由 unserialize() 建立

<?php

class MyClass
{
public
string $property = "myValue";
}

$myObject = new MyClass;

$foo = serialize($myObject);

// 將所有物件反序列化為 __PHP_Incomplete_Class 物件
$disallowed = unserialize($foo, ["allowed_classes" => false]);

var_dump($disallowed);

// 將所有物件反序列化為 __PHP_Incomplete_Class 物件,但 MyClass2 和 MyClass3 除外
$disallowed2 = unserialize($foo, ["allowed_classes" => ["MyClass2", "MyClass3"]]);

var_dump($disallowed2);

// 將未定義的類別反序列化為 __PHP_Incomplete_Class 物件
$undefinedClass = unserialize('O:16:"MyUndefinedClass":0:{}');

var_dump($undefinedClass);

以上範例將輸出

object(__PHP_Incomplete_Class)#2 (2) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(7) "MyClass"
  ["property"]=>
  string(7) "myValue"
}
object(__PHP_Incomplete_Class)#3 (2) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(7) "MyClass"
  ["property"]=>
  string(7) "myValue"
}
object(__PHP_Incomplete_Class)#4 (1) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(16) "MyUndefinedClass"
}

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top