Ver Mensaje Individual
  #2  
Antiguo 01-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita