2010-06-16 38 views
5

Có cách nào để đặt loại rõ ràng thành trường đối tượng trong php không? Một cái gì đó như thế nàyKhai báo lớp PHP

class House{ 
     private Roof $roof 
} 

Trả lời

10

Không, không có. Biến PHP luôn có thể thuộc bất kỳ loại nào. Nhưng bạn có thể thực thi một loại trong setter:

public function setRoof(Roof $roof) { 
    $this->roof = $roof; 
} 
+2

Lưu ý rằng bạn chỉ có thể thực thi các đối tượng hoặc mảng, nhưng không phải loại "nguyên thủy" như phao hoặc chuỗi. – svens

+0

Nếu bạn có một setter dự kiến ​​một kiểu nguyên thủy, 'bool' chẳng hạn, bạn luôn có thể' assert ('is_bool ($ value)'); '. – meagar

+2

@svens: FWIW, PHP phát triển thêm loại vô hướng gợi ý vào ngày 20/5/2010. Tôi không chắc khi nào nó sẽ biến nó thành một bản phát hành chính thức. –

0

Tại sao không chỉ gán $ mái cho một mái nhà mới()?

+0

Xin lỗi gì? – dimo414

9

Bạn không thể sử dụng mã PHP để khai báo kiểu của một lĩnh vực đối tượng.

Nhưng bạn có thể đặt loại gợi ý trong docblock nhận xét:

class House{ 
     /** 
     * @var Roof 
     */ 
     private $roof 
} 

này vẫn không làm cho đoạn code thực thi các loại, nhưng một số công cụ IDE hiểu docblocks và có thể cảnh báo bạn nếu bạn sử dụng biến này mà không phù hợp với gợi ý loại.

0

bạn cũng có thể sử dụng sau đây trước khi sử dụng các thành viên

if (!$this->roof instanceof Roof) { 

    throw new Exception('$this->roof is not an instance of Roof'); 
} 
Các vấn đề liên quan