2010-09-14 29 views
5

Chức năng hỗ trợ người bạn php như hỗ trợ C++?chức năng người bạn trong php?

+0

Hình như nó không: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=friend+function+php và thậm chí Wikipedia dường như không đề cập đến nó: http://en.wikipedia.org/wiki/Friend_function – fabrik

+0

không tìm thấy bạn bè nhưng C++ hỗ trợ lớp hoặc chức năng của bạn bè \ –

+1

bản sao có thể có của [PHP tương đương với bạn bè hoặc nội bộ] (http://stackoverflow.com/questions/317835/php-tương đương-của-bạn-hoặc-nội bộ) –

Trả lời

6

Bạn có nhiều khả năng là tham chiếu đến phạm vi lớp/biến. Trong php, bạn có:

  • công
  • tin
  • bảo vệ

Nhưng không friend tầm nhìn. Tuy nhiên, protected được sử dụng khi các thành viên của đối tượng chỉ được hiển thị đối với các đối tượng mở rộng/kế thừa khác.

More Info:

3

No. Bạn phải khai báo công khai.

2

PHP không hỗ trợ bất kỳ khai báo bạn-như thế nào. Có thể mô phỏng điều này bằng cách sử dụng các phương thức PHP5 __get và __set và kiểm tra một backtrace cho chỉ các lớp người bạn được phép, mặc dù mã để làm điều đó là loại vụng về.

Có một số mẫu mã và thảo luận về chủ đề trên trang web của PHP:

lớp HasFriends { private $ __ bạn bè = array ('MyFriend', 'OtherFriend');

public function __get($key) 
{ 
    $trace = debug_backtrace(); 
    if(isset($trace[1]['class']) && in_array($trace[1]['class'], $this->__friends)) { 
     return $this->$key; 
    } 

    // normal __get() code here 

    trigger_error('Cannot access private property ' . __CLASS__ . '::$' . $key, E_USER_ERROR); 
} 

public function __set($key, $value) 
{ 
    $trace = debug_backtrace(); 
    if(isset($trace[1]['class']) && in_array($trace[1]['class'], $this->__friends)) { 
     return $this->$key = $value; 
    } 

    // normal __set() code here 

    trigger_error('Cannot access private property ' . __CLASS__ . '::$' . $key, E_USER_ERROR); 
} 

}

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