PHP 8.4.0 RC4 available for testing

Класс __PHP_Incomplete_Class

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

Введение

Объект класса создаётся функцией unserialize() при попытке десериализации неопределённого класса или класса, который не указали в списке allowed_classes в параметре options функции unserialize().

До PHP 7.2.0 функция is_object(), которую вызывали на объекте класса __PHP_Incomplete_Class, возвращала false. С PHP 7.2.0 такой вызов будет возвращать true.

Обзор класса

class __PHP_Incomplete_Class {
}

В классе нет свойств или методов по умолчанию. Когда функция unserialize() создаёт объект неполного класса, в дополнение к остальным несериализованным свойствам и значениям объект будет содержать свойство __PHP_Incomplete_Class_Name, которое будет содержать название несериализованного класса.

Примеры

Пример #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);

// Объекты, которые не принадлежат классам MyClass2 и MyClass3, десериализуются в объект класса __PHP_Incomplete_Class
$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