2010-09-14 14 views
5

क्या php समर्थन दोस्त फ़ंक्शन जैसा सी ++ समर्थन करता है?दोस्त फ़ंक्शन?

+0

लगता नहीं: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=friend+function+php और यहां तक ​​कि विकिपीडिया नहीं लगता है इसका जिक्र करें: http://en.wikipedia.org/wiki/Friend_function – fabrik

+0

दोस्त नहीं ढूंढता है लेकिन सी ++ मित्र वर्ग या फ़ंक्शन का समर्थन करता है \ –

+1

[दोस्त या आंतरिक के PHP समकक्ष] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/317,835/php-बराबर के- दोस्त या आंतरिक) –

उत्तर

6

आप कक्षा/चरणीय दायरे का जिक्र कर रहे हैं। php में, तुम हो:

  • सार्वजनिक
  • निजी
  • संरक्षित

लेकिन नहीं friend दृश्यता। protected हालांकि तब उपयोग किया जाता है जब किसी ऑब्जेक्ट के सदस्यों को केवल अन्य विस्तार/विरासत वस्तुओं के लिए दृश्यमान किया जाना चाहिए।

अधिक जानकारी:

3

नहीं। आपको इसे सार्वजनिक घोषित करना होगा।

2

पीएचपी किसी भी दोस्त की तरह घोषणाओं का समर्थन नहीं करता। PHP5 __get और __set विधियों का उपयोग करके इसे अनुकरण करना संभव है और केवल स्वीकृत मित्र वर्गों के लिए बैकट्रैक का निरीक्षण करना संभव है, हालांकि ऐसा करने के लिए कोड बेकार है। ('MyFriend' 'OtherFriend')

वर्ग HasFriends { निजी $ __ मित्र = सरणी;:

कुछ नमूना कोड और चर्चा पीएचपी की साइट पर विषय पर नहीं है की तरह यह करता है

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); 
} 

}

संबंधित मुद्दे