【发布时间】:2013-09-09 12:58:24
【问题描述】:
长期以来,我一直在使用数组来存储相关字段。如果我想拥有相关的用户字段,我使用:
$user = array(
'id' => 27
'name' => 'Pepe'
);
但最近,我一直在处理对象,我更喜欢使用 $user->id 而不是 $user['id']。
我的问题:要实现面向对象的风格,你可以使用stdClass:
$user = new stdClass();
$user->id = 27;
$user->name = 'Pepe';
或从数组中强制转换
$user = (object) array(
'id' => 27
, 'name' => 'Pepe'
);
其中一个比另一个更好,按照性能和风格的顺序,还是你可以模糊地使用你想要的任何东西?
谢谢!
更新: 我同意所有的 cmets,这根本不是 OOP,只是将相关数据分组到一个结构中。我的 $user 示例不是最好的,因为它是使用具有方法、属性、blablabla 的类的典型示例......我问是因为我有很多配置结构,比如我们的“initTable”,我想要类似的东西:
$table => page => init => 1
=> end => 25
sort => field => name
=> order => asc
等等,我想知道什么更好的获取初始化页面:
$table->page->init **OR** $table['page']['init']
【问题讨论】:
-
在内存使用和一般性能方面,我本能地说创建一个对象比创建一个数组并将其转换为一个对象要好。
-
对象中有东西,并不意味着你使用OOP。
-
如果您使用实际的类型化对象,您的 IDE 可以执行智能感知/正确性检查。主观上,这比这些选择之间的微观差异更有用。
-
如果你真的想做 OOP 使用类。
-
@JimmyT.:同意。
stdClass和(object) array最终给了你同样的东西......它基本上是一个具有时髦语法、引用语义的数组,并且缺少大多数使数组 或 对象值得的东西。 OOP 涉及将行为附加到数据,您不能这样做。