PHP:什么时候使用数组,什么时候将对象用于大多数数据存储的代码构造?

PHP是一种混合范式语言,允许使用和返回非对象数据类型,例如数组。我提出一个问题,试图在确定在特定情况下使用哪种编程构造时,阐明一些选择数组还是对象的准则。

这实际上是一个有关使用PHP语言构造对数据进行编码的方法以及何时更可能为了数据传递目的而选择另一种方法(即面向服务的体系结构或Web服务)的问题。

假设您的商品类型由{cost,name,part_number,item_count}组成。您的程序要求显示几种此类项目,并决定使用数组作为外部容器来保存每种项目类型。[您也可以使用PHP的ArrayObjectOO范例,但是我的问题不是关于那个(外部)数组的]。我的问题是关于如何对项目类型数据进行编码,以及使用哪种范式。PHP允许您使用PHP Native ArraysPHP Objects

我可以通过两种方式对此类数据进行编码,如下所示:

//PHP's associative arrays:
$ret = array(
    0 => array(
        'cost' => 10.00, 
        'name' => 'item1',
        'part_number' => 'zyz-100', 
        'item_count' => 15
        ),
    1 => array(
        'cost' => 34.00, 
        'name' => 'item2', 
        'part_number' => 'abc-230', 
        'item_count' => 42
        ),
  );

//here ItemType is encapsulated into an object
$ret = array(
  0 => new ItemType(10.00, 'item1', 'zyz-100', 15),
  1 => new ItemType(34.00, 'item2', 'abc-230', 42),
);

class ItemType
{
    private $price;
    private $name;
    private $partNumber;
    private $itemCount;

    function __construct($price, $name, $partNumber, $itemCount) {..}
}

我在想什么

数组编码是轻量级的,并且更支持JSON,但更容易弄乱。拼写错误的关联数组键之一,您可能会遇到更难以捕获的错误。但是,随心所欲地更改也更容易。说我不想再存储item_count了,我可以使用任何文本处理软件轻松删除item_count阵列中的所有实例,然后相应地更新使用它的其他功能。这可能是一个比较乏味的过程,但是很简单。

面向对象的编码要求使用IDE和PHP语言工具,从而可以更轻松地预先捕获任何错误,但首先很难进行编程和编码。我更难地说,因为您必须仔细考虑对象,提前思考,并且OO编码比键入数组结构要花更多的认知负担。就是说,一旦编码完成,从某种意义上说,某些更改可能更容易实现,item_count例如,删除只需更改较少的代码行。但是,与数组方法相比,更改本身可能仍需要更高的认知负担,因为涉及到更高级别的OO工具。

在某些情况下很明显,例如需要对数据进行操作的情况。但是在某些情况下,当我只需要存储几行“项目类型”数据时,在尝试决定是否使用数组还是构造对象时,我没有明确的指导方针或考虑因素。看来我只能抛硬币然后选一个。是这样吗?

发表评论