Что такое stdClass в PHP?

Укажите, что такое stdClass .

stdClass – общий пустой класс PHP, похожий на Object в Java или object на Python ( Edit: но фактически не используется как универсальный базовый класс, спасибо @Ciaran за указание этого ).

Он полезен для анонимных объектов, динамических свойств и т. Д.

Например, см. Динамические свойства в PHP и StdClass .

stdClass – это всего лишь «пустой» класс, который используется при передаче других типов объектам. Несмотря на то, что говорят два других ответа, stdClass не является базовым классом для объектов в PHP. Это можно продемонстрировать довольно легко:

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

Я не верю, что существует понятие базового объекта в PHP

stdClass – еще одна отличная функция PHP. Вы можете создать анонимный класс PHP. Давайте посмотрим пример.

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

теперь подумайте, что у вас есть еще один класс, который будет инициализироваться с помощью объекта страницы и выполнить на нем базу.

 <?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'; } } 

Теперь вам нужно создать новый объект PageShow с объектом страницы.

Здесь нет необходимости писать новый шаблон класса для этого, вы можете просто использовать stdClass для создания класса на лету.

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

Также стоит отметить, что объект stdClass может быть создан из использования json_decode() .

Точно так же,

 $myNewObj->setNewVar = 'newVal'; 

дает объект stdClass – авто-литой

Я нашел это сегодня, написав:

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

Круто!

Используя stdClass, вы можете создать новый объект со своими собственными свойствами. Рассмотрим следующий пример, который представляет детали пользователя как ассоциативный массив.

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

Если вам нужно представить те же детали, что и свойства объекта, вы можете использовать stdClass, как показано ниже.

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

Если вы разработчик Joomla, обратитесь к этому примеру в документах Joomla для дальнейшего понимания.

На самом деле я попытался создать пустой stdClass и сравнил скорость с пустым классом.

 class emp{} 

затем продолжалось создание 1000 stdClasses и emps … пустые классы выполнялись примерно за 1100 микросекунд, а stdClasses заняли 1700 микросекунд. Поэтому я думаю, что лучше создать свой собственный фиктивный класс для хранения данных, если вы хотите использовать объекты для этого так плохо (массивы намного быстрее для записи и чтения).

stdClass не является анонимным классом или анонимным объектом

Ответы здесь включают выражения, которые stdClass является анонимным классом или даже анонимным объектом. Это неправда.

stdClass – это обычный предопределенный класс. Вы можете проверить это с помощью оператора instanceof или функции get_class . Здесь ничего особенного. PHP использует этот класс при передаче других значений объекту.

Во многих случаях, когда stdClass используется программистами, массив является лучшим вариантом из-за полезных функций и того факта, что этот usecase представляет структуру данных, а не реальный объект.

Если вы хотите быстро создать новый объект для хранения некоторых данных о книге. Вы бы сделали что-то вроде этого:

 $book = new stdClass; $book->title = "Harry Potter and the Prisoner of Azkaban"; $book->author = "JK Rowling"; $book->publisher = "Arthur A. Levine Books"; $book->amazon_link = "http://rads.stackoverflow.com/amzn/click/0439136369"; 

Пожалуйста, проверьте сайт – http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ для получения более подробной информации.

Используемые объекты stdClass

stdClass позволяет вам создавать классы анонимуса и с помощью кастомизации объектов вы также можете получить доступ к ключам ассоциативного массива в стиле ООП. Так же, как вы получили доступ к обычным свойствам объекта.

пример

 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"]); 

будет эхо

Джон Доу

В руководстве php.net есть несколько подробных объяснений и примеров, внесенных пользователями того, что такое stdClass, мне особенно нравится этот http://php.net/manual/en/language.oop5.basic.php#92123 , https: // stackoverflow.com/a/1434375/2352773 .

stdClass – это объект PHP по умолчанию. У stdClass нет свойств, методов или родителя. Он не поддерживает магические методы и не реализует интерфейсов.

Когда вы бросаете скаляр или массив в Object, вы получаете экземпляр stdClass. Вы можете использовать stdClass всякий раз, когда вам нужен экземпляр универсального объекта.

stdClass НЕ является базовым классом! Классы PHP автоматически не наследуются от какого-либо класса. Все классы являются автономными, если только они явно не расширяют другой класс. В этом отношении PHP отличается от многих объектно-ориентированных языков.

Вы можете определить класс, который расширяет stdClass, но вы не получите никакой пользы, поскольку stdClass ничего не делает.

stClass – пустой класс, созданный самим php, и должен использоваться только php, потому что это не просто «пустой» класс, но php использует stdClass для преобразования массивов в стиль объекта, если вам нужно использовать stdClass, я рекомендую две лучшие опции : 1- использование массивов (намного быстрее, чем классы); 2 – создать свой собственный пустой класс и использовать его

 //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'; 

что заставляет кого-то думать об использовании стиля объекта вместо стиля массива ???

Вы также можете использовать object для создания массивов для объекта по вашему выбору:

 Class Example { public $name; public $age; } 

Теперь, чтобы создать объект типа Example и инициализировать его, вы можете выполнить одно из следующих действий:

 $example = new Example(); $example->name = "some name"; $example->age = 22; 

ИЛИ

 $example = new Example(); $example = (object) ['name' => "some name", 'age' => 22]; 

Второй метод в основном полезен для инициализации объектов со многими свойствами.

stdclass – это способ, с помощью которого php избегает останавливать интерпретацию скрипта, когда есть какие-то данные, должен быть помещен в класс, но, к сожалению, этот класс не был определен

Пример :

  return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks'); 

Здесь данные будут помещены в предопределенные «Задачи». Но если бы мы сделали код следующим образом:

  return $statement->fetchAll(PDO::FETCH_CLASS ); 

то php поставит результаты в stdclass .

просто php говорит, что: смотрите, у нас есть хорошие ДЕТИ [Объекты] Здесь, но без Родителей. Итак, мы отправим их в детский дом Care Home stdclass 🙂