variable parametros manejo funciones array php function

parametros - php function use external variable



¿Qué significa & antes del nombre de la función? (3)

¿Eso significa que el $result se devuelve por referencia en lugar de por valor?

No. La diferencia es que puede devolverse por referencia. Por ejemplo:

<?php function &a(&$c) { return $c; } $c = 1; $d = a($c); $d++; echo $c; //echoes 1, not 2!

Para regresar por referencia, debe hacer lo siguiente:

<?php function &a(&$c) { return $c; } $c = 1; $d = &a($c); $d++; echo $c; //echoes 2

¿También dónde se usa esa sintaxis en la práctica ?

En la práctica, usted usa cuando quiera que la persona que llama de su función manipule datos que son propiedad del destinatario sin decirle nada. Esto rara vez se usa porque es una violación de la encapsulación: puede establecer la referencia devuelta al valor que desee; el destinatario no podrá validarlo.

nikic es un gran ejemplo de cuándo esto se usa en la práctica.

¿Qué significa el & antes del nombre de la función?

¿Eso significa que el $result se devuelve por referencia en lugar de por valor? Si es así, ¿es correcto? Como recuerdo, no puede devolver una referencia a una variable local ya que desaparece una vez que la función finaliza.

function &query($sql) { // ... $result = mysql_query($sql); return $result; }

¿También dónde se usa esa sintaxis en la práctica ?


¿Eso significa que el $result se devuelve por referencia en lugar de por valor?

Sí.

¿También dónde se usa esa sintaxis en la práctica ?

Esto es más frecuente en los scripts PHP 4 donde los objetos se pasan por valor de forma predeterminada.


Para responder a la segunda parte de su pregunta, aquí un lugar donde tuve que usarlo: Magic getters!

class FooBar { private $properties = array(); public function &__get($name) { return $this->properties[$name]; } public function __set($name, $value) { $this->properties[$name] = $value; } }

Si no hubiera usado & there, esto no sería posible:

$foobar = new FooBar; $foobar->subArray = array(); $foobar->subArray[''FooBar''] = ''Hallo World!'';

En cambio, PHP arrojaría un error al decir algo como ''no se puede modificar indirectamente la propiedad sobrecargada''.

De acuerdo, probablemente este sea solo un truco para evitar el maldiseño en PHP, pero sigue siendo útil.

Pero, sinceramente, no puedo pensar ahora en otro ejemplo. Pero apuesto a que hay algunos casos de uso raros ...