Pregunta ¿Qué es stdClass en PHP?


Por favor define qué stdClass es.


907
2018-05-31 05:49


origen


Respuestas:


stdClass es la clase genérica vacía de PHP, algo así como Object en Java o object en Python (Editar: pero en realidad no se usa como clase base universal; Gracias @Ciaran para  señalando esto)

Es útil para objetos anónimos, propiedades dinámicas, etc.

Una manera fácil de considerar StdClass es como una alternativa a la matriz asociativa. Vea este ejemplo a continuación que muestra cómo json_decode() permite obtener una instancia StdClass o una matriz asociativa. También, pero no se muestra en este ejemplo, SoapClient::__soapCall devuelve una instancia de StdClass.

<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42

Ver Propiedades dinámicas en PHP y StdClass para más ejemplos.


677
2018-05-31 05:55



stdClass es solo una clase genérica 'vacía' que se usa cuando se lanzan otros tipos a objetos. A pesar de lo que dicen las otras dos respuestas, stdClass es no la clase base para objetos en PHP. Esto se puede demostrar con bastante facilidad:

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'

No creo que haya un concepto de objeto base en PHP


1054
2018-06-14 11:13



stdClass es otra gran característica de PHP. Puedes crear una clase PHP anónima. Veamos un ejemplo.

$page=new stdClass();
$page->name='Home';
$page->status=1;

ahora piensa que tiene otra clase que se inicializará con un objeto de página y ejecutará la base en él.

<?php
class PageShow {

    public $currentpage;

    public function __construct($pageobj)
    {
        $this->currentpage = $pageobj;
    }

    public function show()
    {
        echo $this->currentpage->name;
        $state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
        echo 'This is ' . $state . ' page';
    }
}

Ahora debe crear un nuevo objeto de PageShow con un objeto de página.

Aquí no es necesario escribir una nueva plantilla de clase para esto, simplemente puede usar stdClass para crear una clase sobre la marcha.

    $pageview=new PageShow($page);
    $pageview->show();

80
2017-12-08 09:20



También vale la pena señalar, una stdClass objeto puede ser creado a partir del uso de json_decode() también.


58
2017-10-11 19:11



Igualmente,

$myNewObj->setNewVar = 'newVal'; 

produce un objeto stdClass - autocapturado

Hoy descubrí esto por una ortografía incorrecta:

$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';

¡Guay!


24
2018-05-19 13:47



Utilizando stdClass puedes crear un nuevo objeto con sus propias propiedades. Considere el siguiente ejemplo que representa los detalles de un usuario como una matriz asociativa.

$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";

Si necesita representar los mismos detalles que las propiedades de un objeto, puede usar stdClass como a continuación.

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";

Si eres un desarrollador de Joomla, consulta este ejemplo en los documentos de Joomla para una mayor comprensión.


20
2018-04-06 14:21



En realidad, traté de crear Empty stdClass y comparé la velocidad con la clase vacía.

class emp{}

luego procedió a crear 1000 stdClasses y emps ... las clases vacías se realizaron en alrededor de 1100 microsegundos, mientras que stdClasses tomó más de 1700 microsegundos. Así que supongo que es mejor crear tu propia clase ficticia para almacenar datos si quieres usar objetos para eso (las matrices son mucho más rápidas tanto para escribir como para leer).


7
2018-03-23 15:02