Укажите, что такое 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
– это обычный предопределенный класс. Вы можете проверить это с помощью оператора 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 позволяет вам создавать классы анонимуса и с помощью кастомизации объектов вы также можете получить доступ к ключам ассоциативного массива в стиле ООП. Так же, как вы получили доступ к обычным свойствам объекта.
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 🙂