//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';
是什么让人想到使用对象样式而不是数组样式?
3
stdClass 只是在将其他类型转换为对象时使用的通用'empty'类 . 尽管其他两个答案都说, stdClass 是 not PHP中对象的基类 . 这可以很容易地证明:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
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"]);
$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";
16 回答
另外值得注意的是,也可以使用
json_decode()
创建stdClass
对象 .实际上我尝试创建空的stdClass并将速度与空类进行比较 .
然后继续创建1000个stdClasses和emps ...空类在大约1100微秒内完成,而stdClasses花费了1700微秒 . 所以我想如果你想要那么糟糕地使用对象,那么创建你自己的用于存储数据的虚拟类会更好(对于写入和读取来说,数组要快得多) .
stdClass
是PHP的通用空类,有点像Java中的Object
或Python中的object
( Edit: 但实际上并不用作通用基类;感谢@Ciaran为pointing this out) .它对匿名对象,动态属性等很有用 .
考虑StdClass的简单方法是作为关联数组的替代方法 . 请参阅下面的示例,其中显示了
json_decode()
如何允许获取StdClass实例或关联数组 . 此例但未在此示例中显示,SoapClient::__soapCall
返回StdClass实例 .有关更多示例,请参阅Dynamic Properties in PHP and StdClass .
stClass是一个由php本身创建的空类,应该只由php使用,因为它不仅仅是一个“空”类,如果你需要使用stdClass,php使用stdClass将数组转换为对象样式,我推荐两个更好的选项:1-使用数组(比类快得多)2-制作自己的空类并使用它
是什么让人想到使用对象样式而不是数组样式?
stdClass
只是在将其他类型转换为对象时使用的通用'empty'类 . 尽管其他两个答案都说,stdClass
是 not PHP中对象的基类 . 这可以很容易地证明:我不相信PHP中存在基础对象的概念
使用 stdClass ,您可以使用它自己的属性创建一个新对象 . 请考虑以下示例,该示例将用户的详细信息表示为关联数组 .
如果需要表示与对象属性相同的详细信息,可以使用 stdClass ,如下所示 .
如果您是Joomla开发人员,请参阅this example in the Joomla docs以进一步了解 .
php.net手册有一些可靠的解释和用户贡献的stdClass的例子,我特别喜欢这个http://php.net/manual/en/language.oop5.basic.php#92123,https://stackoverflow.com/a/1434375/2352773 .
stdclass是一种方法,当有一些数据必须放在一个类中时,php避免停止解释脚本,但不幸的是这个类没有被定义
示例:
这里的数据将放在预定义的“任务”中 . 但是,如果我们这样做了代码:
然后php将结果放在stdclass .
只是php说:看,我们有一个很好的KIDS [对象]这里但没有父母 . 所以,我们会把它们寄给婴幼儿护理院stdclass :)
stdClass对象正在使用中
stdClass允许您创建匿名类,并且通过对象转换,您还可以以OOP样式访问关联数组的键 . 就像你访问常规对象属性一样 .
示例
会回应
请记住,2个空stdClasses并不完全相同 . 在撰写 Mock 期望时,这非常重要 .
还值得注意的是,通过使用Casting,您实际上不需要像@Bandula给出的答案那样创建对象 . 相反,您可以简单地将数组转换为对象,并返回stdClass . 例如:
Output: again
stdClass是另一个很棒的PHP功能 . 您可以创建一个匿名PHP类 . 让我们看一个例子 .
现在认为你有另一个类将使用页面对象初始化并在其上执行 .
现在,您必须使用Page Object创建一个新的PageShow对象 .
这里不需要为此编写新的类模板,只需使用stdClass即可创建一个Class .
您还可以使用
object
将数组转换为您选择的对象:现在要创建
Example
类型的对象并初始化它,您可以执行以下任一操作:要么
第二种方法主要用于初始化具有多个对象的对象属性 .
如果您想快速创建一个新对象来保存有关书籍的一些数据 . 你会做这样的事情:
请查看网站 - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/了解更多详情 .
同样,
产生一个stdClass对象 - 自动铸造
今天我通过拼写错误找到了这个:
凉!
stdClass不是匿名类或匿名对象
这里的答案包括
stdClass
是匿名类甚至是匿名对象的表达式 . 这不是真的 .stdClass
只是一个常规的预定义类 . 您可以使用instanceof
运算符或函数get_class
进行检查 . 没什么特别的 . PHP在将其他值转换为object时使用此类 .在程序员使用
stdClass
的许多情况下,数组是更好的选择,因为有用的函数以及这个用例表示数据结构而不是真实对象的事实 .