update page now

La clase stdClass

(PHP 4, PHP 5, PHP 7, PHP 8)

Introducción

Una clase genérica vacía con propiedades dinámicas.

Los objetos de esta clase pueden ser instanciados con new operador o creados por conversión a objeto. Varias funciones de PHP también crean instancias de esta clase, por ejemplo json_decode(), mysqli_fetch_object() o PDOStatement::fetchObject().

A pesar de no implementar __get()/__set() métodos mágicos, esta clase permite propiedades dinámicas y no requiere el #[\AllowDynamicProperties] atributo.

Esto no es una clase base ya que PHP no tiene el concepto de una clase base universal. Sin embargo, es posible crear una clase personalizada que extienda de stdClass y como resultado herede la funcionalidad de propiedades dinámicas.

Sinopsis de la Clase

#[\AllowDynamicProperties]
class stdClass {
}

Esta clase no tiene métodos ni propiedades predeterminadas.

Ejemplos

Ejemplo #1 Creado como resultado de la conversión a objeto

<?php
$obj
= (object) array('foo' => 'bar');
var_dump($obj);

El ejemplo anterior mostrará:

object(stdClass)#1 (1) {
  ["foo"]=>
  string(3) "bar"
}

Ejemplo #2 Creado como resultado de json_decode()

<?php
$json
= '{"foo":"bar"}';
var_dump(json_decode($json));

El ejemplo anterior mostrará:

object(stdClass)#1 (1) {
  ["foo"]=>
  string(3) "bar"
}

Ejemplo #3 Declaración de propiedades dinámicas

<?php
$obj
= new stdClass();
$obj->foo = 42;
$obj->{1} = 42;
var_dump($obj);

El ejemplo anterior mostrará:

object(stdClass)#1 (2) {
  ["foo"]=>
  int(42)
  ["1"]=>
  int(42)
}
add a note

User Contributed Notes 1 note

up
17
Mats M
2 years ago
In PHP8 this has been changed

https://www.php.net/manual/en/migration80.incompatible.php

A number of warnings have been converted into Error exceptions:

Attempting to write to a property of a non-object. Previously this implicitly created an stdClass object for null, false and empty strings.

So if you add properties to a $var, you first need to make it a stdClass()

$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;
To Top