2010-09-14 9 views
5

¿Funciona el amigo de soporte php como lo hace C++?función de amigo en php?

+0

Parece que no es así: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=friend+function+php e incluso Wikipedia no parece mencionarlo: http://en.wikipedia.org/wiki/Friend_function – fabrik

+0

no encuentra amigo, pero C++ es compatible con la clase de amigo o la función \ –

+1

posible duplicado de [PHP equivalente de amigo o interno] (http://stackoverflow.com/questions/317835/php-equivalent-of-friend-or-internal) –

Respuesta

6

Lo más probable es que se refiera al alcance de clase/variable. En php, tiene:

  • pública
  • privada
  • protegida

Pero no friend visibilidad. El protected aunque se usa cuando los miembros de un objeto deben hacerse visibles solo a otros objetos que se extienden/heredan.

Más información:

3

No. Tienes que declararlo público.

2

PHP no soporta ningún amigo declaraciones similares. Es posible simular esto usando los métodos __get y __set de PHP5 e inspeccionando una traza inversa solo para las clases de amigos permitidas, aunque el código para hacerlo es un poco torpe.

Hay algunos ejemplos de código y la discusión sobre el tema en el sitio de PHP:

HasFriends clase { privadas $ __ amigos = 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); 
} 

}

Cuestiones relacionadas