php - recorrer - undefined property: stdclass:: laravel




¿Qué es stdClass en PHP? (11)

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.

Por favor, define que es stdClass .


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


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!


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


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.


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





stdclass