2013-08-14 51 views
5

Nhận thấy điều gì đó về lớp học của PHP và tôi không biết nếu nó là một lỗi hay tại sao nó hoạt động, đây là đoạn code:PHP class sở hữu tư nhân và phương pháp

<?php 
class A { 
    private $prop = 'value'; 

    public function fun() 
    { 
     $obj = new A; 
     $obj->echoProp(); 
    } 

    private function echoProp() 
    { 
     echo 'Prop has value: '.$this->prop; 
    } 
} 

$obj = new A; 
$obj->fun(); 

Và kết quả không phải là một lỗi như Tôi đã mong đợi kể từ khi tôi đang gọi một phương pháp riêng (thử nghiệm trên PHP 5.3.10-1ubuntu3.7 với Suhosin-Patch). Kết quả là "Giá trị có giá trị:"

+0

Bạn có thể mong đợi phương pháp riêng được gọi thay thế như thế nào nếu không phải từ phương thức công khai? – str

+0

Để cụ thể, bạn KHÔNG gọi phương thức riêng tư, bạn đang gọi một phương thức công khai gọi phương thức riêng tư. Phương thức công khai có quyền truy cập vào phương thức riêng, nhưng gọi '$ obj-> echoProp();' sẽ thất bại vì trong trường hợp đó bạn đang gọi phương thức riêng. Nếu kỳ vọng của bạn là đúng, không có gì có thể gọi phương thức riêng tư. – djheru

Trả lời

2

Tại các tài liệu php http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects nó nói:

Tầm nhìn từ các đối tượng khác

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

Vì vậy, đây không phải là lỗi mà là tính năng mong muốn của php.

2

Miễn là bạn đang ở trong lớp, bạn có thể gọi các phương thức riêng tư của lớp học của mình trên bất kỳ trường hợp nào.