(PHP 4 >=4.0.1, PHP 5, PHP 7, PHP 8)
Créer 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é.
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.
Exemple #1 Created by unserialize()
<?php
class MyClass
{
public string $property = "myValue";
}
$myObject = new MyClass;
$foo = serialize($myObject);
// désérialise tous les objet en objet __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" }