2013-05-13 25 views
5

PHP sẽ cho phép gọi đến các phương thức riêng tư miễn là chúng đến từ các phiên bản của cùng một lớp.Tại sao PHP cho phép gọi các phương thức riêng tư từ các phiên bản khác?

Đây là cách the PHP docs giải thích nó:

Đối tượng cùng loại sẽ được tiếp cận với mỗi người khác tư nhân và các thành viên bảo vệ mặc dù họ không phải là những trường hợp tương tự. Điều này là do các chi tiết cụ thể thực hiện đã được biết khi bên trong các đối tượng đó.

Điều này không phá vỡ đóng gói? Làm thế nào để thực tế rằng implementation specific details are known biện minh cho nó?

p.s. Có những ngôn ngữ khác (hướng đối tượng) thực hiện điều này không?

+0

Theo ý kiến ​​của tôi, nó phá vỡ các quy tắc oop, tuy nhiên, đây có phải là câu hỏi của bạn không? – Voitcus

Trả lời

1

Điều này đúng cho hầu hết các ngôn ngữ, trong java bạn có thể làm điều đó quá, này là vì đối tượng là từ cùng một ví dụ, nó "biết" tất cả các tính chất tương tự trường hợp có

1

Là một câu trả lời cho post scriptum, Delphi (cái gọi là "đối tượng pascal") và Lazarus ("pascal miễn phí") cả hai cho phép truy cập vào các thuộc tính riêng chỉ trong cùng một đơn vị mà việc thực hiện lớp được mã hóa. Vì vậy, bạn có thể chèn hai lớp khác nhau bên trong một đơn vị và chúng có quyền truy cập vào các thuộc tính riêng của nhau.

Không được phép nếu hai lớp được đặt trong các đơn vị khác nhau (giả sử nó giống như một không gian tên trong PHP).

1

Là một câu trả lời cho "không phá vỡ đóng gói này?":

Mặc dù định nghĩa Encapsulation principle in OOP là một chút mơ hồ. Cách tôi hiểu nó là nó giữ dữ liệu cá nhân và logic trong giới hạn của một lớp.

Đóng gói được sử dụng để ẩn các giá trị hoặc tiểu bang của một đối tượng dữ liệu có cấu trúc bên trong một lớp học, ngăn chặn bên không được phép truy cập trực tiếp với họ.

Tôi không biết nếu hành vi này của các tầng lớp trong PHP, Java và các ngôn ngữ khác là tốt hay xấu, nhưng tôi không nghĩ rằng nó phá vỡ các Đóng gói các lớp.

+0

Chắc chắn. Đối với các thành viên lớp, 'nó giữ dữ liệu cá nhân và logic trong giới hạn của một lớp'. Ví dụ thành viên, tuy nhiên, điều này không phải là trường hợp. –

+1

@EmanuilRusev http://stackoverflow.com/a/4244833/679227 –