# Класс __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`.

## Обзор класса

#[\AllowDynamicProperties]
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);

    // Объекты, которые не принадлежат классам 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"
    }

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open