(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
.
В классе нет свойств или методов по умолчанию.
Когда функция 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);
// Объекты, которые не принадлежат классам 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" }