2011-12-23 89 views
39

Vì vậy, tôi đã tìm kiếm một lúc và không thể tìm thấy câu trả lời cho một câu hỏi đơn giản. Có thể có một mảng các đối tượng trong PHP không? Chẳng hạn như:Mảng đối tượng PHP

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

Vì một lý do nào đó tôi không thể tìm thấy câu trả lời ở bất cứ đâu. Tôi cho rằng điều đó là có thể nhưng tôi chỉ cần chắc chắn.

+4

có thể thực hiện được. – Indranil

Trả lời

72

Nơi tốt nhất để tìm câu trả lời cho (câu hỏi và phần nào dễ dàng) nói chung như thế này là để đọc lên trên PHP docs. Cụ thể trong trường hợp của bạn, bạn có thể đọc thêm trên objects. Bạn có thể lưu trữ các đối tượng stdObject và instantiated trong một mảng. Trong thực tế, có một quá trình được gọi là 'hydration' sẽ điền các biến thành viên của một đối tượng với các giá trị từ một hàng cơ sở dữ liệu, sau đó đối tượng được lưu trữ trong một mảng (có thể với các đối tượng khác) và trả về mã gọi để truy cập.

- Edit -

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"; 
} 
+4

Tôi đã thử trang web php và không thể tìm thấy bất kỳ thứ gì. Tôi cũng đang ngồi với cuốn sách "Đối tượng PHP, Patters và Thực hành" của Matt Zandstra. và không thể tìm thấy bất kỳ thông tin nào. – Beamer180

+0

@EricLarsen: Đã cập nhật bài đăng. –

+1

Câu hỏi: Giả sử bạn chỉ muốn in 'màu' của chỉ một' Ô tô' trong mảng đó. Bạn có nói 'echo $ cars [0] -> color; 'để in cái đầu tiên, và' echo $ cars [1] -> color; 'để in cái thứ hai? –

18

Có.

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

print_r($array); 

Kết quả trong:

Array 
(
    [0] => stdClass Object 
     (
     ) 

    [1] => stdClass Object 
     (
     ) 

) 
+6

Tôi đã hẹn giờ và mất 20 giây để kiểm tra, bao gồm cả thời gian nhập. – ceejayoz

+0

Vậy tên lớp của tôi có thay thế stdClass không? Điều gì sẽ xảy ra nếu đối tượng đã được tạo và bạn muốn thêm nó vào mảng. Có thể sử dụng các hàm tạo với phương thức ở trên không? p.s. xin lỗi tôi mới đến SO – Beamer180

+3

Không có gì đặc biệt về nó. Thêm nó vào mảng tuy nhiên bạn thích. Đây chỉ đơn giản là một cuộc biểu tình mà bạn có thể rất, rất dễ dàng kiểm tra những thứ này. – ceejayoz

6

Mảng có thể giữ con trỏ vì vậy khi tôi muốn có một mảng các đối tượng tôi làm điều đó.

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

Điều này sẽ cho thấy đối tượng được tham chiếu và có thể truy cập qua mảng.

5

Có, có thể có mảng đối tượng trong 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>"; 
+0

Chúng ta có phải _have_ tiếp tục tăng chỉ số hàm xây dựng trong myObject() mỗi khi chúng ta muốn thêm một đối tượng mới vào mảng hay nó là tùy chọn? Tất cả các công cụ OOP này trong ngôn ngữ web chỉ đơn giản là OOPS! –

+0

@YoustayIgo chỉ dành cho ví dụ, để đầu ra phân biệt các đối tượng với nhau.Bạn có thể đặt bất kỳ giá trị nào bạn thích trong hàm tạo, sau đó nó chỉ gán giá trị đó cho thuộc tính $ property của đối tượng. – ADyson

Các vấn đề liên quan