PHP 日本大会 2024

__PHP_Incomplete_Class 类

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

简介

当尝试反序列化未定义的类或unserialize()options数组的allowed_classes中未列出的类时,由unserialize()创建。

在 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