【问题标题】:PHP array to object good or bad practicePHP数组对象的好坏习惯
【发布时间】:2014-11-01 02:44:27
【问题描述】:

我正在为使用数组的自定义 Web 应用程序创建树状数据结构,但我发现很难访问树根内的嵌套数组

//this is the code i have created
$Root = array(
    'car' => array(
         'id' => '0009'
         'driver' => 'david',
         'color' => 'red'
     ) 
    'bus' => array(
         'id' => '0010'
         'driver' => 'alex',
         'color' => 'green'
     )
);

所以在退货时我必须这样做

$driver = $root['car']['driver'];

通过在 'array()' 之前添加 '(object)' 将所有这些数组转换为对象将解决这样的问题:

$Root = (object)array(
    'car' => (object)array(
         'id' => '0009'
         'driver' => 'david',
         'color' => 'red'
     ) 
    'bus' => (object)array(
         'id' => '0010'
         'driver' => 'alex',
         'color' => 'green'
     )
);

所以现在我可以通过以下方式访问这些项目:

$driver = $root->car->driver;

现在的问题是,这种方式在创建多个数组时是否存在性能问题,每个数组包含 100 个或更多项?

【问题讨论】:

    标签: php arrays oop object


    【解决方案1】:

    不好的做法。为什么要将数组转换为对象?将它们用作数组。如果你想要对象,那么创建一个类文件,并使用对象,而不仅仅是将数组转换为对象。

    【讨论】:

    • 我同意,你也会得到像继承这样的好处。 Vehicle > Car, Vehicle > Bus, etc..
    • 好吧,问题是数组的内容是动态的,数组的键是由数据库或“GET”参数驱动的。所以我无法创建类并向它们添加具有静态名称的属性。如果您有其他方法,请编写代码示例:) :) .
    • 查找 __set(), __get() -- php 中的动态属性。但这实际上并没有好多少,您应该提前知道属性是什么。否则你怎么能验证或使用任何东西。
    • 好的,魔术 __get 和 __set 对我的设计来说是非​​常好的解决方案
    • 如果您有来自某个商店的数据并且它以数组的形式出现,该怎么办。更改对象仍然是个坏主意?
    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2023-01-12
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多