我什么时候应该使用stdClass,什么时候应该在php oo代码中使用数组?

2022-08-30 08:46:22

在一个大规模重构的工作时期,我希望引入stdClass *****作为从函数返回数据的一种方式,我试图找到非主观的论据来支持我的决定。

是否有任何情况最好使用一个而不是另一个?

使用stdClass而不是数组有什么好处?


有人会说,函数必须尽可能小且具体,才能返回一个值。我决定使用stdClass是暂时的,因为我希望从长远来看为每个进程找到正确的值对象。


答案 1

通常的方法是

  • 返回具有固定分支的已定义数据结构时使用对象:

     $person
       -> name = "John"
       -> surname = "Miller"
       -> address = "123 Fake St"
    
  • 返回列表时使用数组:

      "John Miller"
      "Peter Miller"
      "Josh Swanson"
      "Harry Miller"
    
  • 返回结构化信息列表时使用对象数组:

      $person[0]
        -> name = "John"
        -> surname = "Miller"
        -> address = "123 Fake St"
    
      $person[1]
        -> name = "Peter"
        -> surname = "Miller"
        -> address = "345 High St"
    

对象不适合保存数据列表,因为您始终需要一个键来寻址它们。数组可以同时实现这两种功能 - 保存任意列表和数据结构。

因此,如果需要,可以在第一个和第三个示例中对对象使用关联数组。我会说这真的只是一个风格和偏好的问题。

@Deceze在何时使用对象(验证,类型检查和将来的方法)方面提出了许多很好的观点。


答案 2

恕我直言,使用来实现与数组相同的功能并不是很有用,它只是增加了对象的开销,没有任何实际的好处。您还错过了许多有用的数组函数(例如 )。您至少应该创建自己的类以启用类型检查,或者向对象添加方法以使其值得使用对象。stdClassarray_intersect


推荐