Массив объектов PHP
Поэтому я долго искал и не могу найти ответ на простой вопрос. Возможно ли иметь массив объектов в PHP? Такие как:
$ar=array();
$ar[]=$Obj1
$ar[]=$obj2
По какой-то причине я нигде не смог найти ответ. Я предполагаю, что это возможно, но мне просто нужно убедиться.
7 ответов
Лучшее место, чтобы найти ответы на общие (и несколько простые вопросы), такие как это, - прочитать документацию по 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";
}
Да.
$array[] = new stdClass;
$array[] = new stdClass;
print_r($array);
Результаты в:
Array
(
[0] => stdClass Object
(
)
[1] => stdClass Object
(
)
)
Вы можете сделать что-то вроде этого:
$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.
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>";
Массивы могут содержать указатели, поэтому, когда я хочу массив объектов, я делаю это.
$a = array();
$o = new Whatever_Class();
$a[] = &$o;
print_r($a);
Это покажет, что на объект ссылаются и доступ через массив.
Еще одно интуитивное решение может быть:
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";
}
Хотя все приведенные ответы верны, на самом деле они не полностью отвечают на вопрос, касающийся использования конструкции [] и, в более общем смысле, заполнения массива объектами.
Более актуальный ответ можно найти в том, как создавать массивы объектов в PHP без указания номера индекса? что наглядно показывает, как решить проблему.