Pregunta

Por favor, defina lo que es stdClass.

¿Fue útil?

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.

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 .

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 :)

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 ???

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top