什么是更好的stdClass或(对象)数组来存储相关数据?

Cho*_*roc 15 php oop object

我一直在使用数组来存储相关领域.如果我想拥有相关的用户字段,我使用了:

$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)

Ale*_*lex 9

基于小测试(http://phpfiddle.org/lite/code/cz0-hyf)我可以说使用"new stdClass()"比其他选项慢约3倍.

这很奇怪,但与stdClass相比,投射数组非常有效.

但是这个测试只计算执行时间.它不计量内存.

PS我只使用phpFiddle来共享代码.测试在我当地的PC上完成.


dav*_*rad 7

尝试调查这个问题,这里每次测试每次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很多百分比.但我不指望它是一般的普遍规则或法律.