Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   se pueden pasar objetos como parametros? (https://www.clubdelphi.com/foros/showthread.php?t=64440)

gabrielflowers 01-04-2009 18:20:02

se pueden pasar objetos como parametros?
 
hola todos, tengo una duda se pueden pasar objetos como parametros de funciones??, ahora bien, si es posible, el paso de objetos se hace necesariamente por referencia?? algun ejemplo que puedan postear o sugerencias/comentarios? saludos gracias

roman 01-04-2009 18:58:16

Sí, claro que se pueden pasar objetos. El paso es por valor pero hay que tener cuidado con eso, porque desde la versión 5.x, las variables de tipo objeto no contienen en sí mismas el valor del objeto sino que son punteros al objeto. Esto implica que si tu función modifica propiedades del objeto, los cambios se reflejan al exterior, pero si tu función cambia el valor de la variable, el cambio no se refleja.

Queda mejor con un par de ejemplos:

Código PHP:

class User
{
  var 
$realName '';
  var 
$loginName '';
  var 
$password '';
}

$user = new User();
$user->realName 'Mahatma Gandhi';
$user->loginName 'gandhi';
$user->password 'f0d044df01b9010c16dc7223f5e842dc';

function 
cambiaPropiedades($user)
{
  
$user->password 'mohandas';
}

function 
cambiaValor($user)
{
  
$user 'mahoma va a la montaña';


Si aplicas la función cambiaPropiedades a $user, luego de la llamada $user se verá así:

Código:

object(User)[1]
  public 'realName' => string 'Mahatma Gandhi' (length=14)
  public 'loginName' => string 'gandhi' (length=6)
  public 'password' => string 'mohandas' (length=8)

Sin embargo, si aplicas la función cambiaValor, $user se verá así:

Código:

object(User)[1]
  public 'realName' => string 'Mahatma Gandhi' (length=14)
  public 'loginName' => string 'gandhi' (length=6)
  public 'password' => string 'f0d044df01b9010c16dc7223f5e842dc' (length=32)

Es decir, sin cambios, porque lo que cambió en la función fue el valor del puntero pero no el objeto al cuál apunta.

Si en cambio defines cambiaValor como:

Código PHP:

function cambiaValor(&$user// <-- observa el apóstrofo
{
  
$user 'mahoma va a la montaña';


entonces, luego de la llamada $user se ve así:

Código:

string 'mahoma va a la montaña' (length=22)
porque el paso fue por referencia.

// Saludos


La franja horaria es GMT +2. Ahora son las 15:46:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi