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



пожалуйста, определить, что stdClass есть.

1300   16  

16 ответов:

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

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

простой способ рассмотреть StdClass является альтернативой ассоциативного массива. См. этот пример ниже, который показывает, как json_decode() позволяет получить StdClass экземпляр или ассоциативный массив. Но не показано в этом примере, SoapClient::__soapCall возвращает экземпляр 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

посмотреть динамические свойства в 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 с объектом Page.

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

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

также стоит отметить, что stdClass объект может быть создан с помощью json_decode() Как хорошо.

кроме того,

$myNewObj->setNewVar = 'newVal'; 

дает объект stdClass-auto casted

я узнал об этом сегодня опечатка:

$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"] = "[email protected]";

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

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "[email protected]";

Если вы разработчик 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 = "J. K. 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 не имеет свойств, методы или родитель. Он не поддерживает магические методы, а реализует никаких интерфейсов.

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

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

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

также стоит отметить, что с помощью кастинга вам фактически не нужно создавать объект, как в ответе, данном @Bandula. Вместо этого вы можете просто привести свой массив к объекту и stdClass возвращается. Например:

$array = array(
    'Property1'=>'hello',
    'Property2'=>'world',
    'Property3'=>'again',
);

$obj = (object) $array;
echo $obj->Property3;

Output: again

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

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

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

пример :

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

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

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

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

просто php говорит, что: смотрите, у нас есть хорошие дети[объекты] здесь, но без родителей . Итак, мы отправим их в детский дом stdclass :)

пожалуйста, имейте в виду, что 2 пустых класса std не являются строго равными. Это очень важно при написании насмешливых ожиданий.

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 >

вы также можете использовать 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];

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

Comments

    Ничего не найдено.