PHP对象的数组

Bea*_*180 57 php arrays object

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

$ar=array();    
$ar[]=$Obj1    
$ar[]=$obj2
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ell 92

找到一般(以及一些简单的问题)答案的最佳位置就是阅读PHP文档.特别是在您的情况下,您可以阅读更多关于对象.您可以在数组中存储stdObject和实例化对象.实际上,有一个称为" 水合 " 的过程,它使用来自数据库行的值填充对象的成员变量,然后将对象存储在数组中(可能与其他对象一起)并返回到调用代码以进行访问.

- 编辑 -

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";
}
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过php网站,但却找不到任何东西.我也坐在Matt Zandstra的"PHP Objects,Patters,and Practice"一书中.并且无法找到任何信息. (8认同)
  • 问题:假设您只想在该阵列中打印一个"Car"的"颜色".你会说`echo $ cars [0] - > color;`打印第一个,`echo $ cars [1] - > color;`打印第二个? (2认同)
  • @MikeWarren:正确,这就是水合一系列物体(又称为“集合”)的力量。如果您需要检索集合中的特定对象,您还可以指定每个对象获取的键,例如“$car['blue_4_door'] = $anotherCar”。 (2认同)

cee*_*yoz 24

是.

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

print_r($array);
Run Code Online (Sandbox Code Playgroud)

结果是:

Array
(
    [0] => stdClass Object
        (
        )

    [1] => stdClass Object
        (
        )

)
Run Code Online (Sandbox Code Playgroud)

  • 我计时了,这需要20秒才能测试,包括打字时间. (6认同)
  • 没什么特别的.根据需要将它添加到数组中.这只是一个演示,您可以非常轻松地自己测试这些类型的东西. (3认同)
  • 这就是问题的答案,而接受的答案指向了完全不同的OOPS方向 (2认同)

Sli*_*eam 18

你可以这样做:

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

结果:

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"
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

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

$a = array();
$o = new Whatever_Class();
$a[] = &$o;
print_r($a);
Run Code Online (Sandbox Code Playgroud)

这将显示该对象是通过数组引用和访问的.


riz*_*zon 6

是的,可以在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>";
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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";
}
Run Code Online (Sandbox Code Playgroud)