2009-11-04 5 views
99

estoy usando la biblioteca de Facebook con este código en él:¿Qué significa iniciar una función de PHP con un signo de &?

class FacebookRestClient { 
... 
    public function &users_hasAppPermission($ext_perm, $uid=null) { 
     return $this->call_method('facebook.users.hasAppPermission', 
     array('ext_perm' => $ext_perm, 'uid' => $uid)); 
    } 
... 
} 

Lo que hace el & al comienzo de la definición de función media, y cómo puedo ir sobre el uso de una biblioteca como esta (de una forma sencilla ejemplo)

Respuesta

130

Un ampersand antes del nombre de una función significa que la función devolverá una referencia a una variable en lugar del valor.

retorno por referencia es útil cuando desea utilizar una función para encontrar a qué variable debe estar una referencia ligada . No utilice el retorno por referencia para aumentar el rendimiento. El motor optimizará automáticamente esto en . Solo las referencias de devolución cuando tiene una razón técnica válida para hacerlo.

Ver Returning References.

+3

Además, http://php.net/references podría ayudar un poco también. –

+1

Entonces, sin entrar en demasiados detalles, llamaría (con la clase instanciada) algo así como $ results = $ facebook-> users_hasAppPermission ($ param1, $ param2); ? Supongo que no estoy seguro de los matices aquí, gracias por la ayuda. –

+2

Sí, lo llamaría así. –

13

Devuelve una referencia, como ya se ha mencionado. En PHP   4, los objetos se asignaron por valor, al igual que cualquier otro valor. Esto es muy poco intuitivo y contrario a cómo funciona la mayoría de los otros idiomas.

Para evitar el problema, se usaron referencias para variables que apuntaban a objetos. En PHP   5, las referencias se usan muy raramente. Supongo que esto es código heredado o código que trata de preservar la compatibilidad con PHP   4.

+0

Es la biblioteca oficial de Facebook PHP, FWIW. –

+0

Información sobre el nuevo Modelo de Objeto PHP 5 (a diferencia del antiguo sinsentido de paso por valor (y otras tonterías) de PHP4): http://php.net/manual/en/migration5.oop.php – Dereleased

+3

@Alex : En ese caso, probablemente lo estén haciendo para proteger a los hackers casuales, que usan php4, de ellos mismos. No debe hacer esto en su propio código: está desaprobado. – troelskn

Cuestiones relacionadas