PHP 对象数组

Posted

技术标签:

【中文标题】PHP 对象数组【英文标题】:Array of PHP Objects 【发布时间】:2012-01-26 14:02:57 【问题描述】:

所以我一直在寻找一段时间,找不到一个简单问题的答案。是否可以在 php 中有一个对象数组?如:

$ar=array();    
$ar[]=$Obj1    
$ar[]=$obj2

由于某种原因,我无法在任何地方找到答案。我认为这是可能的,但我只需要确定。

【问题讨论】:

【参考方案1】:

是的。

$array[] = new stdClass;
$array[] = new stdClass;

print_r($array);

结果:

Array
(
    [0] => stdClass Object
        (
        )

    [1] => stdClass Object
        (
        )

)

【讨论】:

我计时了,测试用了二十秒,包括打字时间。 那么我的类名会替换stdClass吗?如果对象已经创建并且您只想将其添加到数组中怎么办。可以通过上述方法使用构造函数吗? p.s.抱歉,我是新手 它没有什么特别之处。随意添加到数组中。这只是一个演示,您可以非常非常轻松地自己测试这些东西。 这是问题的答案,而接受的答案指向完全不同的 OOPS 方向 @ceejayoz 是的,但谷歌这个答案不到 5 秒;)【参考方案2】:

查找诸如此类的一般(以及一些简单的问题)答案的最佳位置是阅读PHP docs。具体而言,您可以在objects 上阅读更多信息。您可以将 stdObject 和实例化对象存储在数组中。实际上,有一个称为“hydration”的过程,它使用数据库行中的值填充对象的成员变量,然后将对象存储在数组中(可能与其他对象一起)并返回给调用代码访问。

-- 编辑--

class Car

    public $color;
    public $type;


$myCar = new Car();
$myCar->color = 'red';
$myCar->type = 'sedan';

$yourCar = new Car();
$yourCar->color = 'blue';
$yourCar->type = 'suv';

$cars = array($myCar, $yourCar);

foreach ($cars as $car) 
    echo 'This car is a ' . $car->color . ' ' . $car->type . "\n";

【讨论】:

我已经尝试了 php 站点,但没有找到任何东西。我还坐在 Matt Zandstra 的《PHP 对象、模式和实践》一书中。并没有找到任何信息。 问题:假设您只想打印该数组中的一个Car 中的color。你会说echo $cars[0]->color; 打印第一个,echo $cars[1]->color; 打印第二个吗? 我只记得有一个很棒的东西叫做 Ideone,它可以让你在线测试代码 sn-ps。回答我自己的问题:是的,您可以:ideone.com/8XB4TC @MikeWarren:正确,这就是为一组对象补水的能力,也就是“集合”。您还可以具体说明每个对象获得的键,以防您需要检索集合中的特定对象,例如 `$car['blue_4_door'] = $anotherCar'。 所以如果我有 20 个对象,我必须输入 20 次 $yourCar = new Car(); ?没有像 let car = [, ,] 这样的 JS 更优雅的方法了吗?【参考方案3】:

数组可以保存指针,所以当我想要一个对象数组时,我会这样做。

$a = array();
$o = new Whatever_Class();
$a[] = &$o;
print_r($a);

这将表明该对象已通过数组被引用和访问。

【讨论】:

【参考方案4】:

是的,在 PHP 中可以有对象数组。

class MyObject 
  private $property;

  public function  __construct($property) 
    $this->Property = $property;
  

$ListOfObjects[] = new myObject(1); 
$ListOfObjects[] = new myObject(2); 
$ListOfObjects[] = new myObject(3); 
$ListOfObjects[] = new myObject(4); 

print "<pre>";
print_r($ListOfObjects);
print "</pre>";

【讨论】:

每次我们想在数组中添加一个新对象时,我们是否必须继续增加 myObject() 中的构造函数索引,或者它是可选的吗?网络语言中的所有这些 OOP 内容简直就是 OOPS! @YoustayIgo 仅用于示例,以便输出将对象彼此区分开来。您可以在构造函数中放置您喜欢的任何值,然后它只需将该值分配给对象的 $property 属性。【参考方案5】:

尽管给出的所有答案都是正确的,但实际上它们并没有完全回答关于使用 [] 构造以及更一般地用对象填充数组的问题。

更相关的答案可以在 how to build arrays of objects in PHP without specifying an index number? 这清楚地表明了如何解决问题。

【讨论】:

【参考方案6】:

另一个直观的解决方案可能是:

class Post

    public $title;
    public $date;


$posts = array();

$posts[0] = new Post();
$posts[0]->title = 'post sample 1';
$posts[0]->date = '1/1/2021';

$posts[1] = new Post();
$posts[1]->title = 'post sample 2';
$posts[1]->date = '2/2/2021';

foreach ($posts as $post) 
  echo 'Post Title:' . $post->title . ' Post Date:' . $post->date . "\n";

【讨论】:

最好的...为我节省了很多时间。不过,这里有一个小调整,而不是做这个增量,只是尝试把它放在一个循环中并使用一个变量来增量。无论是针对单个对象还是数百个对象都没有关系,它看起来会更通用。【参考方案7】:

你可以这样做:

$posts = array(
  (object) [
    'title' => 'title 1',
    'color' => 'green'
  ],
  (object) [
    'title' => 'title 2',
    'color' => 'yellow'
   ],
   (object) [
     'title' => 'title 3',
     'color' => 'red'
   ]
);

结果:

var_dump($posts);

array(3) 
  [0]=>
  object(stdClass)#1 (2) 
    ["title"]=>
    string(7) "title 1"
    ["color"]=>
    string(5) "green"
  
  [1]=>
  object(stdClass)#2 (2) 
    ["title"]=>
    string(7) "title 2"
    ["color"]=>
    string(6) "yellow"
  
  [2]=>
  object(stdClass)#3 (2) 
    ["title"]=>
    string(7) "title 3"
    ["color"]=>
    string(3) "red"
  

【讨论】:

以上是关于PHP 对象数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP convertion:数组到对象,对象到数组

PHP对象转数组||PHP数组转对象

php怎么将对象或者数组写入一个文本文件

如何在 PHP 中克隆对象数组?

php数组对象有中文,输出乱码怎么解决

PHP数组转对象,对象转数组