2009-09-16 22 views
7

Tôi đã làm theo hướng dẫn để tạo một ứng dụng viết blog đơn giản trong PHP và đã sửa đổi các lớp trong hướng dẫn này để chúng có thêm khả năng. Sửa đổi ứng dụng xương rất trần này đã giúp tôi hiểu rõ hơn về cách thức hoạt động của PHP, tuy nhiên tôi đã chạy qua một tình huống thú vị.Điều quan trọng là phải khai báo rõ ràng các thuộc tính trong PHP?

Một trong các lớp trong dự án của tôi có khoảng một nửa tá thuộc tính lớp học như public $id, public $author, public $post. Các thuộc tính này được khai báo ở đầu lớp này tuy nhiên tôi thấy rằng nếu tôi loại bỏ tất cả, nhưng một trong các thuộc tính này thì ứng dụng vẫn hoạt động chính xác.

Có sai lầm khi loại bỏ một tuyên bố sở hữu như public $datePosted từ đầu của một lớp nếu lớp này vẫn gán biến vào thuộc tính này như thế này: $this->datePosted = $someVariableName;

Trả lời

12

Nếu yo u cố gắng truy cập một tài sản lớp mà chưa được công bố, PHP sẽ ra thông báo:

class Foo { } 

var $fu = new Foo(); 
echo $fu->baz; 

Notice: Undefined property: Foo::$baz in blah.php on line 4

Nếu bạn đặt một giá trị đầu tiên ($fu->baz = 'blah') sau đó nó đã giành không phàn nàn, nhưng đó không phải là một tình huống tuyệt vời.

Bạn chắc chắn nên khai báo tất cả các biến lớp học của bạn (tất nhiên trừ khi bạn muốn có một số vui vẻ với magic methods) ...

8

nó rõ ràng hơn cho bất cứ ai đọc mã của bạn rằng các thành viên đã được định nghĩa rõ ràng là công khai thay vì chỉ mặc định là công khai vì bạn chưa chỉ định chúng làm thành viên công khai.

Ngoài ra, $this->$datePosted là sai, nó phải là như thế này:

$this->datePosted = $someVariable; 

có thể được lý do tại sao bạn đang gặp một lỗi.

+0

Cảm ơn câu trả lời. $ this -> $ datePosted là một lỗi đánh máy mà Daok đã sửa. Nó không thực sự là một vấn đề trong mã của tôi. – somas1

2

Ngoài ra, nếu bạn loại bỏ kê khai mã đọc biến này trước khi writting với nó, bạn sẽ có một lỗi như báo

PHP: bất động sản Không xác định: A :: $ unexistent trong C: \ temp \ test.php trên dòng 8

Notice: Undefined tài sản: A :: $ unexistent trong C: \ temp \ test.php trên dòng 8

5

PHP là thực sự lỏng lẻo về cách nó xử lý các định nghĩa thành viên lớp. Bạn về mặt kỹ thuật không phải khai báo chúng. Nhưng bạn nên, vì hai lý do lớn:

  • Người thông minh IDE (Eclipse, Aptana, Zend Studio) sẽ yêu nếu họ có thể tận dụng lợi thế của biên tập viên của họ của mã IntelliSense (tự động hoàn tất) khi làm việc với các lớp học của bạn. Tính năng này thực sự giúp ngăn chặn lỗi liên quan đến lỗi chính tả. Nếu bạn không khai báo các trường của bạn, IDE không có cách nào thực sự xác định các trường của lớp.

  • Một người nào đó vừa hoàn thành công việc với ngôn ngữ được biên dịch (C++) có khả năng sẽ gửi một người đánh sau bạn nếu họ thấy thiếu trường được xác định đúng. Nó chỉ là thực hành tốt để tuyên bố chúng. Không có lý do gì để không.

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