PHP 编程中,如果一个函数要返回多个值,可以以对象 stdClass 的方式,也可以以数组 array 的方式返回数据。那么我们应该什么时候用 stdClass,什么时候用 array 呢?还是都用 array ?
这位开发者的说法是:
当返回有固定结构的数据时,使用对象:
Default
$person
-> name = "John"
-> surname = "Miller"
-> address = "123 Fake St"
1
2
3
4
$person
->name="John"
->surname="Miller"
->address="123 Fake St"
当返回列表时使用数组:
Default
"John Miller"
"Peter Miller"
"Josh Swanson"
"Harry Miller"
1
2
3
4
"John Miller"
"Peter Miller"
"Josh Swanson"
"Harry Miller"
当返回一组有固定结构的数据时使用对象组成的数组:
Default
$person[0]
-> name = "John"
-> surname = "Miller"
-> address = "123 Fake St"
$person[1]
-> name = "Peter"
-> surname = "Miller"
-> address = "345 High St"
1
2
3
4
5
6
7
8
9
$person[0]
->name="John"
->surname="Miller"
->address="123 Fake St"
$person[1]
->name="Peter"
->surname="Miller"
->address="345 High St"
对象不适合保存一组数据,因为总是需要根据属性名去获取属性值,数组可以保存一组数据,也可以保存有固定结构的数据。但是具体使用哪种就看开发者的风格和喜好了。
该开发者给出了一个建议或者说是一般做法,但是并没有给出一个强制的结论。
另外需要注意的是,array 效率比 stdClass 高,请看如下代码:
Default
$t = microtime(true);
for ($i = 0; $i < 1000; $i++) {
$z = array();
for ($j = 0; $j < 10000; $j++) {
$z['a'] = 'a';
$z['b'] = 'b';
$z['c'] = $z['a'] . $z['b'];
}
}
echo microtime(true) - $t, PHP_EOL;
$t = microtime(true);
for ($i = 0; $i < 1000; $i++) {
$z = new stdclass();
for ($j = 0; $j < 10000; $j++) {
$z->a = 'a';
$z->b = 'b';
$z->c = $z->a . $z->b;
}
}
echo microtime(true) - $t, PHP_EOL;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$t=microtime(true);
for($i=0;$i<1000;$i++){
$z=array();
for($j=0;$j<10000;$j++){
$z['a']='a';
$z['b']='b';
$z['c']=$z['a'].$z['b'];
}
}
echomicrotime(true)-$t,PHP_EOL;
$t=microtime(true);
for($i=0;$i<1000;$i++){
$z=newstdclass();
for($j=0;$j<10000;$j++){
$z->a='a';
$z->b='b';
$z->c=$z->a.$z->b;
}
}
echomicrotime(true)-$t,PHP_EOL;
最终输出结果是:
可以看到,array 比 stdClass 确实要快一些。好吧,这点时间其实可以忽略不计啦~
我的结论?结论就是:你喜好用 stdClass 就用 stdClass,你喜好用 array 就用 array 咯,但是同一个项目里最好保持一致,不要有的函数返回对象,而有的函数又返回数组。