2012-03-16 34 views
6

Tôi đã tự hỏi nếu một thuộc tính lớp được khởi tạo và chỉ được sử dụng trong một phương thức lớp, nó có phải là một thuộc tính lớp hay không hoặc nó chỉ là một biến cục bộ có thể truy cập vào phương thức lớp đó?Tôi có nên giữ các biến chỉ được sử dụng trong một phương thức lớp cục bộ hoặc khai báo chúng dưới dạng thuộc tính lớp không?

Ví dụ, tôi có nên giữ một biến chỉ được sử dụng trong một phương pháp như là một biến địa phương như thế này:

class myClass 
{ 
    public function myMethod() 
    { 
     $_myVariableUsedOnlyOnce = "Hello World"; 
     echo $_myVariableUsedOnlyOnce; 
    } 
} 

Hoặc tôi nên làm cho biến một tài sản lớp tin như thế này:

class myClass 
{ 
    private $_myVariableUsedOnlyOnce; 

    public function myMethod() 
    { 
     $this->_myVariableUsedOnlyOnce = "Hello World"; 
     echo $this->_myVariableUsedOnlyOnce; 
    } 
} 

Cách tiếp cận nào "có mùi"? Những lợi ích để làm cho tất cả các biến phương thức thuộc tính lớp khác hơn khi tôi cần print_r() toàn bộ đối tượng cho mục đích gỡ lỗi là gì?

Cảm ơn

+1

Nếu bạn chắc chắn, nó sẽ chỉ được sử dụng một lần, đặt địa phương vào phương pháp. Nếu không, bạn chính xác đặt nó ở chế độ riêng tư. _Unless_ bạn cần giá trị của biến đó để tồn tại giữa các cuộc gọi của phương thức đó, trong đó ít nhất nó cần phải là 'static' trong phương thức. –

Trả lời

4

Nếu bạn cần nó có độ bền trong các cuộc gọi hàm, thuộc tính lớp sẽ là tốt nhất để nó di chuyển xung quanh khi đối tượng thực hiện. Bạn cũng có thể muốn sử dụng nó vì các lý do khác trong tương lai ở các chức năng khác. Tuy nhiên, nó làm thêm chi phí.

Nói chung, lớp học phải có một số tương tự trong thế giới thực, vì vậy nếu biến của bạn tương ứng với một điều gì đó có ý nghĩa, ví dụ: một lớp người có chiều cao $, sau đó nó thuộc về thuộc tính lớp. Nếu không, nếu nó chỉ là một phần của các phép tính bên trong của một phương thức, thì nó không thực sự thuộc về lớp đó, ví dụ: một người không có một $ shoelaceIterator hoặc bất cứ điều gì.

Tôi cho rằng một thiết kế đối tượng khó hiểu sẽ có nhiều mùi hơn một chi phí bộ nhớ nhỏ có khả năng (mặc dù điều này phụ thuộc vào độ lớn của biến đó).

0

Trước tiên, tôi sẽ hỏi bạn có thực sự cần biến/thuộc tính nếu bạn chỉ sử dụng nó một lần. Khi một "mùi", một thuộc tính được lưu trữ trong bộ nhớ cho toàn bộ vòng đời của đối tượng trong khi biến chỉ trong bộ nhớ cho đến khi phương thức kết thúc thực hiện.

+0

Rõ ràng đó chỉ là một ví dụ đơn giản và tôi sẽ làm nhiều hơn với các biến trong phương thức hơn là chỉ lặp lại "Hello World". Nhưng cảm ơn, tôi thấy lợi ích về phân bổ bộ nhớ. – Tom

+0

Nó không chỉ phân bổ bộ nhớ, như "zedat" đã chỉ ra tốc độ của nó là tốt. – nathanjosiah

0

Nếu bạn không cần biến ngoài phương pháp, nó không phải là bất kỳ thuộc tính nào của lớp. Hơn nữa, việc truy cập các biến cục bộ nhanh hơn.

0

Trong cách tiếp cận thiết kế thuần túy, tôi khuyên bạn nên chọn lựa theo thuộc tính/thuộc tính được mô hình hóa.

Trong điều kiện hiệu suất thuần túy, có một thuộc tính tĩnh tốt hơn vì không gian bộ nhớ sẽ không được phân bổ với từng phiên bản của lớp.

1

Các biến cục bộ này không phải là thuộc tính của đối tượng của bạn.

Chúng không xác định đối tượng của bạn, chúng không được khai báo là thành viên riêng tư.

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