【发布时间】:2012-01-26 14:02:57
【问题描述】:
所以我一直在寻找一段时间,找不到一个简单问题的答案。是否可以在 PHP 中有一个对象数组?如:
$ar=array();
$ar[]=$Obj1
$ar[]=$obj2
由于某种原因,我无法在任何地方找到答案。我认为这是可能的,但我只需要确定。
【问题讨论】:
所以我一直在寻找一段时间,找不到一个简单问题的答案。是否可以在 PHP 中有一个对象数组?如:
$ar=array();
$ar[]=$Obj1
$ar[]=$obj2
由于某种原因,我无法在任何地方找到答案。我认为这是可能的,但我只需要确定。
【问题讨论】:
是的。
$array[] = new stdClass;
$array[] = new stdClass;
print_r($array);
结果:
Array
(
[0] => stdClass Object
(
)
[1] => stdClass Object
(
)
)
【讨论】:
查找诸如此类的一般(以及一些简单的问题)答案的最佳位置是阅读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";
}
【讨论】:
Car 中的color。你会说echo $cars[0]->color; 打印第一个,echo $cars[1]->color; 打印第二个吗?
$yourCar = new Car(); ?没有像 let car = [{}, {},{}] 这样的 JS 更优雅的方法了吗?
数组可以保存指针,所以当我想要一个对象数组时,我会这样做。
$a = array();
$o = new Whatever_Class();
$a[] = &$o;
print_r($a);
这将表明该对象已通过数组被引用和访问。
【讨论】:
是的,在 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>";
【讨论】:
尽管给出的所有答案都是正确的,但实际上它们并没有完全回答关于使用 [] 构造以及更一般地用对象填充数组的问题。
更相关的答案可以在 how to build arrays of objects in PHP without specifying an index number? 这清楚地表明了如何解决问题。
【讨论】:
另一个直观的解决方案可能是:
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";
}
【讨论】:
你可以这样做:
$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"
}
}
【讨论】: