Pregunta
Por favor, defina lo que es stdClass
.
Solución
stdClass
es clase vacía genérico de PHP, algo así como Object
en Java o object
en Python ( Editar , pero que no se utilizan realmente como clase base universal, gracias @Ciaran para señalar esto ).
Es útil para objetos anónimos, propiedades dinámicas, etc.
Una manera fácil de considerar la StdClass es como alternativa a la matriz asociativa. Vea este ejemplo de abajo 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 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
Propiedades dinámicas en PHP y StdClass para más ejemplos.
Otros consejos
stdClass
es sólo una clase genérica 'vacío' que se utiliza cuando se cuelan otros tipos de objetos. A pesar de lo que dicen los otros dos respuestas, stdClass
es no la clase base para los 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 hay un concepto de un objeto de base en PHP
stdClass es una otra gran característica de PHP. Puede crear una clase PHP anónimo. Deja para comprobar un ejemplo.
$page=new stdClass();
$page->name='Home';
$page->status=1;
Ahora piensa que tiene una 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 usted tiene que crear un nuevo objeto PageShow con un objeto de página.
Aquí hay necesidad de escribir una nueva clase de plantilla para ello se puede utilizar simplemente stdClass para crear una clase sobre la marcha.
$pageview=new PageShow($page);
$pageview->show();
También digno de mención, un objeto stdClass
puede ser creado a partir de la utilización de json_decode()
también.
Con stdClass se puede crear un nuevo objeto con sus propias propiedades. Considere el ejemplo siguiente 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 utilizar stdClass de la siguiente manera.
$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";
Si usted es un desarrollador de Joomla referirse este ejemplo en la documentación de Joomla para una mayor comprensión.
Asimismo,
$myNewObj->setNewVar = 'newVal';
produce un objeto stdClass - auto fundido
Yo descubrí esto hoy por falta de ortografía:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Cool!
stdClass no es una clase anónima o objeto anónimo
Las respuestas aquí incluye expresiones que stdClass
es una clase anónima o incluso objeto anónimo. No es una verdad.
stdClass
es sólo una clase predefinida regular. Esto se puede comprobar mediante el operador o función instanceof
get_class
. Nada especial va aquí. PHP utiliza esta clase cuando fundición otros valores a objeto.
En muchos casos en los que stdClass
se utiliza por los programadores de la matriz es la mejor opción, porque de funciones útiles y el hecho de que este usecase representa la estructura de datos no es un objeto real.
He intentado crear vacío stdClass y comparado la velocidad a la clase vacía.
class emp{}
procedieron crear stdClasses 1000 y EMP ... clases vacías se realizaron en unos 1.100 microsegundos, mientras stdClasses tomaron más de 1700 microsegundos. Así que supongo que es mejor crear su propia clase ficticia para el almacenamiento de datos si desea utilizar los objetos para que tan mal (matrices son mucho más rápido tanto para la escritura y lectura).
objetos StdClass en uso
El stdClass le permite crear clases y anónimos con el objeto que proyecta también se puede acceder a las claves de una matriz asociativa en el estilo de programación orientada a objetos. Al igual que usted podrá acceder a la propiedad del objeto regular.
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
También es digno de mención que mediante el uso de casting que en realidad no necesita crear un objeto como en la respuesta dada por @Bandula. En lugar de ello sólo tiene que emitir su matriz a 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
Si desea crear rápidamente un nuevo objeto de mantener algunos datos acerca de un libro. Se podría hacer 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://www.amazon.com/dp/0439136369/";
Por favor, compruebe el sitio - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ para más detalles.
Por favor, tenga en cuenta que 2 stdClasses vacíos no son estrictamente iguales. Esto es muy importante cuando se escribe expectativas 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 >
php.net manual tiene algunos explicación sólida y ejemplos aportados por los usuarios de lo stdClass es, me gusta especialmente éste http://php.net/manual/en/language.oop5.basic.php#92123 , https://stackoverflow.com/a/1434375/2352773 .
stdClass es el objeto de PHP por defecto. stdClass no tiene propiedades, métodos o padre. No es compatible con los métodos mágicos, e implementos no hay interfaces.
Cuando lanzas un escalar o matriz como objeto, se obtiene una instancia de stdClass. Puede utilizar stdClass cada vez que necesite un objeto genérico instancia.
stdClass NO es una clase base! clases PHP no heredan automáticamente de cualquier clase. Todas las clases son independientes, a menos que explícitamente extender otra clase. PHP se diferencia de muchos lenguajes orientados a objetos a este respecto.
Se puede definir una clase que se extiende stdClass, pero que se obtendría sin beneficiar, como stdClass no hace nada.
stdClass es una manera en la que el < a class = href = "/ preguntas / etiquetado / php" título "post-etiqueta" = "Mostrar preguntas etiquetados 'php'" rel "etiqueta" => php evitar detener la interpretación de la secuencia de comandos cuando hay algunos datos debe ser puesto en una clase, pero Por desgracia, esta clase no se definió
Ejemplo:
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
A continuación, los datos serán puestos en las 'tareas' predefinidos. Pero, si lo hicimos el código como este:
return $statement->fetchAll(PDO::FETCH_CLASS );
pondrán los resultados de stdClass .
'php'" dice que: mira, tener una buena cabritos [Objetos] aquí, pero sin sus padres. Por lo tanto, vamos a enviarlos a un niño infantil Home Care stdClass :)
También se puede utilizar para emitir object
matrices para un objeto de su elección:
Class Example
{
public $name;
public $age;
}
Ahora para crear un objeto de tipo Example
e inicializar que puede realizar cualquiera de las siguientes:
$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 la inicialización de objetos con muchas propiedades.
stClass es una clase vacía creado por php sí mismo, y debe ser utilizado por php solamente, porque no es sólo una clase de "vacío", PHP utiliza para convertir stdClass matrices a objeto de estilo Si es necesario utilizar stdClass, recomiendo dos mejores opciones: 1- matrices de uso (mucho más rápido que las clases) 2- hacer su propia clase vacía y lo utilizan
//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';
lo que hace que alguien piense acerca de cómo utilizar el estilo de objeto en lugar de estilo de matriz ???