Массив объектов 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 без указания номера индекса? что наглядно показывает, как решить проблему.

Другие вопросы по тегам