# La classe __PHP_Incomplete_Class

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

## Introduction

Créée par unserialize(), lorsque l'on essaie de désérialiser une classe non définie ou une classe non listée dans les `allowed_classes` du tableau `options` de unserialize().

Avant PHP 7.2.0, utiliser is_object() sur la classe __PHP_Incomplete_Class retournait `false`. À partir de PHP 7.2.0, `true` sera retourné.

## Synopsis de la classe

#[\AllowDynamicProperties]
final class __PHP_Incomplete_Class {
}

Cette classe n'a pas de propriétés ou de méthodes par défaut. Lorsqu'elle est créée par unserialize(), en plus de toutes les propriétés et valeurs désérialisées l'objet aura une propriété `__PHP_Incomplete_Class_Name` qui contiendra le nom de la classe désérialisée.

## Historique

Version | Description
--- | ---
8.0.0 | Cette classe est désormais `final`.

## Exemples

Exemple #1 Créée par unserialize()

    <?php

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

    $myObject = new MyClass;

    $foo = serialize($myObject);

    // désérialise tous les objets en objets __PHP_Incomplete_Class
    $disallowed = unserialize($foo, ["allowed_classes" => false]);

    var_dump($disallowed);

    // désérialise tous les objets en objet __PHP_Incomplete_Class sauf ceux des classes MyClass2 et MyClass3
    $disallowed2 = unserialize($foo, ["allowed_classes" => ["MyClass2", "MyClass3"]]);

    var_dump($disallowed2);

    // désérialise une classe non définie en objet __PHP_Incomplete_Class
    $undefinedClass = unserialize('O:16:"MyUndefinedClass":0:{}');

    var_dump($undefinedClass);

L'exemple ci-dessus va afficher :

    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