我一直在使用数组来存储相关领域.如果我想拥有相关的用户字段,我使用了:
$user = array(
'id' => 27
'name' => 'Pepe'
);
Run Code Online (Sandbox Code Playgroud)
但是最近,我一直在使用对象,我更喜欢使用$ user-> id而不是$ user ['id'].
我的问题:要实现面向对象的样式,可以使用stdClass:
$user = new stdClass();
$user->id = 27;
$user->name = 'Pepe';
Run Code Online (Sandbox Code Playgroud)
或从数组中转换
$user = (object) array(
'id' => 27
, 'name' => 'Pepe'
);
Run Code Online (Sandbox Code Playgroud)
按性能和风格排序,其中一个比另一个好,还是可以模糊地使用你想要的任何东西?
谢谢!
更新: 我同意所有的评论,这根本不是OOP,只是将相关数据分组到一个结构中.我的$ user示例不是最好的,因为它是使用带有方法,属性,blablabla的类的典型示例...我问,因为我有很多配置结构,比如我们"initTable",我想要类似的东西:
$table => page => init => 1
=> end => 25
sort => field => name
=> order => asc
Run Code Online (Sandbox Code Playgroud)
等等,我想知道什么是更好的获取初始页面:
$table->page->init **OR** $table['page']['init']
Run Code Online (Sandbox Code Playgroud)
基于小测试(http://phpfiddle.org/lite/code/cz0-hyf)我可以说使用"new stdClass()"比其他选项慢约3倍.
这很奇怪,但与stdClass相比,投射数组非常有效.
但是这个测试只计算执行时间.它不计量内存.
PS我只使用phpFiddle来共享代码.测试在我当地的PC上完成.
尝试调查这个问题,这里每次测试每次1.000.000次:
$start = microtime(true);
for ($i=0;$i<1000000;$i++) {
$user = new stdClass();
$user->id = 27;
$user->name = 'Pepe';
}
$end = microtime(true);
echo $end - $start;
echo '<br><br>';
$start = microtime(true);
for ($i=0;$i<1000000;$i++) {
$user = (object) array(
'id' => 27,
'name' => 'Pepe'
);
}
$end = microtime(true);
echo $end - $start;
Run Code Online (Sandbox Code Playgroud)
报告
0.75109791755676
0.51117610931396
Run Code Online (Sandbox Code Playgroud)
所以 - 显然,在这种特殊情况下 - 从数组中转换是最快的方法.击败stdClass很多百分比.但我不指望它是一般的普遍规则或法律.
| 归档时间: |
|
| 查看次数: |
7979 次 |
| 最近记录: |