que - ¿Qué es stdClass en PHP?
undefined property: stdclass php (16)
Por favor, define que es stdClass
.
stdClass no es una clase anónima ni un objeto anónimo
Las respuestas aquí incluyen expresiones de que stdClass
es una clase anónima o incluso un objeto anónimo. No es una verdad.
stdClass
es simplemente una clase predefinida regular. Puede verificar esto usando el operador instanceof
o la función get_class
. Nada especial va aquí. PHP usa esta clase cuando lanza otros valores al objeto.
En muchos casos en stdClass
los programadores utilizan stdClass
la matriz es la mejor opción, debido a las funciones útiles y al hecho de que este caso de uso representa la estructura de datos y no un objeto real.
stdClass objetos en uso
El stdClass le permite crear clases anónimas y con la conversión de objetos también puede acceder a las claves de una matriz asociativa en estilo OOP. Al igual que usted podría acceder a la propiedad objeto normal.
Ejemplo
class Example {
private $options;
public function __construct(Array $setup)
{
// casting Array to stdClass object
$this->options = (object) $setup;
// access stdClass object in oop style - here transform data in OOP style using some custom method or something...
echo $this->options->{''name''}; // ->{''key''}
echo $this->options->surname; // ->key
}
}
$ob1 = new Example(["name" => "John", "surname" => "Doe"]);
hará eco
John Doe
El manual de php.net tiene algunas explicaciones sólidas y ejemplos aportados por los usuarios de lo que es stdClass. Me gusta especialmente este http://php.net/manual/en/language.oop5.basic.php#92123 , https://.com/a/1434375/2352773 .
stdClass es el objeto PHP predeterminado. stdClass no tiene propiedades, métodos o padre. No admite métodos mágicos, y no implementa interfaces.
Cuando lanza un escalar o matriz como Objeto, obtiene una instancia de stdClass. Puede usar stdClass siempre que necesite una instancia de objeto genérico.
stdClass NO es una clase base! Las clases de PHP no se heredan automáticamente de ninguna clase. Todas las clases son independientes, a menos que extiendan explícitamente otra clase. PHP se diferencia de muchos lenguajes orientados a objetos en este aspecto.
Podría definir una clase que extienda stdClass, pero no obtendría ningún beneficio, ya que stdClass no hace nada.
En realidad, traté de crear stdClass vacío y comparé la velocidad con la clase vacía.
class emp{}
luego se 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. Entonces, creo que es mejor crear tu propia clase ficticia para almacenar datos si quieres usar objetos para eso (los arreglos son mucho más rápidos tanto para escribir como para leer).
Igualmente,
$myNewObj->setNewVar = ''newVal'';
produce un objeto stdClass - auto casteado
Descubrí esto hoy por ortografía:
$GLOBASLS[''myObj'']->myPropertyObj->myProperty = ''myVal'';
¡Guay!
Si desea crear rápidamente un nuevo objeto para almacenar algunos datos sobre un libro. Harías algo como esto:
$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://rads..com/amzn/click/0439136369";
Consulte el sitio: http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ para obtener más detalles.
También puede usar el object
para convertir matrices a un objeto de su elección:
Class Example
{
public $name;
public $age;
}
Ahora, para crear un objeto de tipo Example
e inicializarlo, puede hacer cualquiera de estas acciones:
$example = new Example();
$example->name = "some name";
$example->age = 22;
O
$example = new Example();
$example = (object) [''name'' => "some name", ''age'' => 22];
El segundo método es principalmente útil para inicializar objetos con muchas propiedades.
También vale la pena señalar que al usar Casting no es necesario crear un objeto como en la respuesta dada por @Bandula. En su lugar, simplemente puede convertir su matriz en un objeto y se devuelve el stdClass. Por ejemplo:
$array = array(
''Property1''=>''hello'',
''Property2''=>''world'',
''Property3''=>''again'',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
También vale la pena señalar, un objeto stdClass
se puede crear a partir del uso de json_decode()
también.
Tenga en cuenta que 2 stdClasses vacías no son estrictamente iguales. Esto es muy importante a la hora de escribir las expectativas de burla.
php > $a = new stdClass();
php > $b = new stdClass();
php > var_dump($a === $b);
bool(false)
php > var_dump($a == $b);
bool(true)
php > var_dump($a);
object(stdClass)#1 (0) {
}
php > var_dump($b);
object(stdClass)#2 (0) {
}
php >
Usando stdClass puede 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"] = "[email protected]";
Si necesita representar los mismos detalles que las propiedades de un objeto, puede usar stdClass como se muestra a continuación.
$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "[email protected]";
Si usted es un desarrollador de Joomla, consulte este ejemplo en los documentos de Joomla para una mayor comprensión.
stClass es una clase vacía creada por php en sí, y debe ser utilizada solo por php, ya que no es solo una clase "vacía", php usa stdClass para convertir matrices al estilo de un objeto si necesita usar stdClass, le recomiendo dos mejores opciones : 1- usa matrices (mucho más rápido que las clases) 2- crea tu propia clase vacía y úsala
//example 1
$data=array(''k1''=>''v1'' , ''k2''=>''v2'',....);
//example 2
//creating an empty class is faster than instances an stdClass
class data={}
$data=new data();
$data->k1=''v1'';
$data->k2=''v2'';
¿Qué hace que alguien piense en usar el estilo de objeto en lugar del estilo de matriz?
stdClass es otra gran característica de PHP. Puedes crear una clase anónima de PHP. Veamos un ejemplo.
$page=new stdClass();
$page->name=''Home'';
$page->status=1;
ahora piensa que tienes otra clase que se inicializará con un objeto de página y ejecutará una 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 tienes que crear un nuevo objeto PageShow con un objeto Page.
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();
stdClass
es la clase vacía genérica de PHP, algo así como Object
en Java o object
en Python ( Edición: pero en realidad no se usa como clase base universal; gracias a @Ciaran por señalarlo ).
Es útil para objetos anónimos, propiedades dinámicas, etc.
Una forma fácil de considerar el 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 de StdClass o una matriz asociativa. Además, 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.
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
no es 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
stdclass es una forma en la que el php evita dejar de interpretar el script cuando hay algunos datos que se deben colocar en una clase, pero desafortunadamente esta clase no se definió
Ejemplo:
return $statement->fetchAll(PDO::FETCH_CLASS , ''Tasks'');
Aquí los datos se pondrán en las ''Tareas'' predefinidas. Pero, si hiciéramos el código así:
return $statement->fetchAll(PDO::FETCH_CLASS );
entonces el php pondrá los resultados en stdclass .
simplemente php dice que: mira, tenemos un buen KIDS [Objetos] aquí pero sin padres. Por lo tanto, los enviaremos a una stdclass cuidado infantil para el hogar stdclass