什么是PHP中的stdClass?

请定义stdClass是什么。

stdClass是PHP的通用空类,有点像Java中的Object或Python中的object编辑:但实际上并没有用作通用基类;感谢@Ciaran 指出了这一点 )。

这对匿名对象,dynamic属性等是有用的

例如,请参阅PHP和StdClass中的dynamic属性 。

stdClass只是在将其他types转换为对象时使用的通用“空”类。 尽pipe其他两个答案说, stdClass 不是 PHP中的对象的基类。 这可以很容易地certificate:

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

我不相信PHP中有一个基础对象的概念

stdClass是另一个伟大的PHPfunction。 你可以创build一个匿名的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'; } } 

现在,您必须使用Page Object创build一个新的PageShow对象。

在这里,不需要为此写一个新的类模板,只需使用stdClass即可创build一个类。

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

另外值得注意的是,也可以使用json_decode()来创build一个stdClass对象。

同样,

 $myNewObj->setNewVar = 'newVal'; 

产生一个stdClass对象 – 自动铸造

我今天通过拼写错误发现了这一点:

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

凉!

使用stdClass你可以用它自己的属性创build一个新的对象。 考虑下面的例子,将用户的细节表示为关联数组。

 $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文档中的此示例以进一步了解。

其实我试图创build空的stdClass和速度比较空课堂。

 class emp{} 

然后继续创build1000个stdClass和emps …空的类在1100微秒左右完成,而stdClasses占用了1700微秒。 所以我想最好是创build自己的虚拟类来存储数据,如果你想使用对象那么糟糕(数组在写入和读取时要快得多)。

stdClass不是匿名类或匿名对象

这里的答案包括expression式, stdClass是一个匿名类,甚至是匿名对象。 这不是真的。

stdClass只是一个常规的预定义的类。 您可以使用instanceof运算符或函数get_class来检查。 这里没什么特别的。 在将其他值转换为对象时,PHP使用此类。

在很多情况下,程序员使用stdClass ,数组是更好的select,因为有用的函数和这个用例代表数据结构不是真实的对象。

如果你想快速创build一个新的对象来保存关于一本书的一些数据。 你会做这样的事情:

 $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-intead-array/了解更多详情。;

正在使用的stdClass对象

stdClass允许你创build匿名类和对象转换,你也可以访问OOP风格的联合数组的键。 就像你会访问常规的对象属性一样。

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

会回声

John 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类不会自动从任何类inheritance。 所有的类都是独立的,除非他们明确地扩展了另一个类。 PHP在这方面与许多面向对象的语言不同。

你可以定义一个扩展stdClass的类,但是你不会得到任何好处,因为stdClass什么也不做。

stClass是由php本身创build的空类,应该只用于PHP,因为它不仅仅是一个“空”类,如果需要使用stdClass,php使用stdClass将数组转换为对象样式,我推荐两个更好的选项:1 – 使用数组(比类快得多)2 – 创build自己的空类并使用它

 //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将数组强制转换为您所select的对象:

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

现在创build一个types为Example的对象并初始化它,你可以执行以下任一操作:

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

要么

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

第二种方法主要用于初始化具有许多属性的对象。

stdclass是一种避免停止解释脚本的方法,当有一些数据必须放在一个类,但不幸的是这个类没有定义

例如:

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

这里的数据将被放在预定义的“任务”中。 但是,如果我们这样做的代码:

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

那么PHP会把结果放在stdclass中 。

只是PHP说:看,我们有一个很好的儿童[对象]在这里,但没有父母。 所以,我们会把他们送到幼儿托儿所stdclass 🙂