A classe __PHP_Incomplete_Class

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

Introdução

Criada por unserialize() ao tentar desserializa uma classe indefinida ou uma classe não listada nas classes permitidas na chave allowed_classes do array do parâmetro options da função unserialize().

Antes do PHP 7.2.0, usar is_object() na classe __PHP_Incomplete_Class retornaria false. A partir do PHP 7.2.0, será retornado true.

Resumo da classe

class __PHP_Incomplete_Class {
}

Esta classe não tem propriedades ou métodos padrões. Quando criada por unserialize(), além de todas as propriedades e valores desserializados, o objeto terá uma propriedade __PHP_Incomplete_Class_Name que conterá o nome da classe desserializada.

Exemplos

Example #1 Criada por unserialize()

<?php

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

$myObject = new MyClass;

$foo = serialize($myObject);

// desserializa todos os objetos em objetos __PHP_Incomplete_Class
$disallowed = unserialize($foo, ["allowed_classes" => false]);

var_dump($disallowed);

// desserializa todos os objetos em objetos __PHP_Incomplete_Class exceto os de MyClass2 e MyClass3
$disallowed2 = unserialize($foo, ["allowed_classes" => ["MyClass2", "MyClass3"]]);

var_dump($disallowed2);

// desserializa classe indefinida em objeto __PHP_Incomplete_Class
$undefinedClass = unserialize('O:16:"MyUndefinedClass":0:{}');

var_dump($undefinedClass);

O exemplo acima produzirá:


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"
}