No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Parámetros por referencia

18/25
Recursos

Aportes 12

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Lo había visto en código pero no conocía la teoría, muchas gracias Carlos

Parametros por referencia

Cuando declaras una variable, lo que sucede es que se ocupa un lugar en tu memoria para guardar el valor de dicha variable. ¿Y como sabe PHP que lugar de memoria se ocupó? Bueno, PHP lo sabe por que guarda la referencia de ese lugar. Los nombres de lugares de memoria suelen ser coas como 0x123124234

<h5>Paso de parametros por referencia</h5>

Cuando pasamos parametros a una funcion, lo que hacemos es hacer una copia de la variable, es decir, estamos guardando el mismo valor en diferentes espacios

Hacer un paso por referencia significa que, en lugar de mandar una copia de la variable, estamos mandando la referencia de dicha variable. Es decir, estamos apuntando al mismo espacio en memoria gracias a que tenemos su referencia

Para acceder a la referncia en memoria usamos & en la variable deseada para acceder a la variable original

$cat = "Meow!";

function make_a_cat_bark(&$cat_dog) {
    $cat_dog = "Woof!";
}

make_a_cat_bark($cat);
echo $cat;
echo "\n";

🤣 Retax: muchas personas le tienen miedo, buuuu
Yo:

Cuando declaramos una variable en PHP, lo que sucede es que se ocupa un lugar en la memoria de tú computadora para guardar el valor de dicha variable. ¿Cómo sabe PHP qué lugar en la memoria se ocupó? Bueno, PHP lo sabe porque guarda una referencia a ese lugar.
Supongamos que tenemos los siguientes nombres direcciones de memorias.

  • Carlos.

  • Mariana.

  • José.

  • Raúl.

  • Etc…

Declaramos una variable en PHP.

  $edad = 14;

La computadora lo guardará de forma aleatoria en algunas de las direcciones antes mencionadas, digamos que lo guarda en Mariana, es decir:

  • Carlos.

  • Mariana.

    • $edad = 14;
  • José.

  • Raúl.

  • Etc…

Ahora dentro de la dirección llamada Mariana se encuentra almacenada la variable $edad = 14;
Mariana es la referencia porque es el nombre que me dice en qué lugar de la memoria se guardó mi variable, es decir, hace referencia hacia el espacio donde está guardado.

¿Qué es el paso de parámetros por referencia?

Cuando pasamos parámetros a una función, lo que hacemos es hacer una copia de la variable, es decir, estamos guardando el mismo valor en diferentes espacios de memoria.

¿Qué es el paso de parámetros por referencia?

Hacer un paso por referencia significa que, en lugar de mandar una copia de la variable, estamos mandando la referencia de dicha variable. Es decir, estamos apuntando al mismo espacio en memoria gracias a que tenemos su referencia.

<?php

// Variable original.
$cat = "Meow!";

function make_a_cat_bark(&$cat_dog)
{

    /**
     * Al recibir una variable por referencia '&$cat_dog',
     * modifica el valor de la variable original '$cat'
     */
    $cat_dog = "Woof!";
}

// Llamamos a la función y enviamos el parámetro.
make_a_cat_bark($cat);

echo $cat . PHP_EOL; // Imprimirá 'Woof!'

He usado esto, pero nunca lo entendí como hasta hoy 😃

```js class mandarMail { public function enviar(&$mensaje) { $mensaje = "Mensaje enviado: " . $mensaje; } } $mensaje = "Hola, ¿cómo estás?"; $mandarMail = new mandarMail(); $mandarMail->enviar($mensaje); echo $mensaje; // Imprime "Mensaje enviado: Hola, ¿cómo estás?" ```class mandarMail { public function enviar(&$mensaje) { $mensaje = "Mensaje enviado: " . $mensaje; } } $mensaje = "Hola, ¿cómo estás?"; $mandarMail = new mandarMail(); $mandarMail->enviar($mensaje); echo $mensaje; // Imprime "Mensaje enviado: Hola, ¿cómo estás?"

Me gustó mucho esta clase, entiendo que, cuando pasas parámetros por referencia, estás teniendo la posibilidad que dentro de la función modifiques el valor inicial de la variable. Cuando no lo hacemos, solo estamos pasando el valor de la variable para utilizarla dentro de la función y retornar un valor diferente en un espacio de memoria diferente, o retornar el mismo valor inicial pero, en un espacio de memoria diferente.

🐘 En PHP, los argumentos se pasan a las funciones por valor por defecto, lo que significa que se utiliza una copia del valor en la función y la variable que se pasó a la función no puede ser modificada. Sin embargo, si deseas que una función modifique sus argumentos, necesitas pasar los argumentos por referencia. Aquí hay una explicación detallada de cómo funcionan los parámetros por referencia en PHP: 1. **Sintaxis**: Para pasar un argumento por referencia, debes anteponer el operador `&` al nombre del parámetro en la definición de la función. Por ejemplo: ```PHP function foo(&$var) { $var++; } $a = 5; foo($a); // $a ahora es 6 ``` En este código, `$a` es pasado por referencia a la función `foo`, lo que permite que modifique el valor de `$a`. 2. **Modificación de Variables**: Cuando pasas una variable por referencia, cualquier cambio que la función haga en el argumento se refleja en la variable original que se pasó. Por ejemplo: ```PHP function add\_some\_extra(&$string) { $string .= ' and something extra.'; } $str = 'This is a string,'; add\_some\_extra($str); echo $str; // Salida: 'This is a string, and something extra.' ``` En este ejemplo, la función `add_some_extra` modifica la variable `$str` porque se pasa por referencia a la función. 3. **Ámbito de la Variable**: Cuando las variables en PHP se pasan por valor, el ámbito de la variable definida a nivel de función está ligado dentro del ámbito de la función, y cambiar cualquiera de las variables no tiene ningún efecto en ninguna de las variables. Sin embargo, cuando pasas variables por referencia, el ámbito de la variable se extiende fuera de la función, permitiendo que la función modifique la variable original. Pasar parámetros por referencia es una característica poderosa en PHP, ya que permite que las funciones tengan una especie de "canal de comunicación" con el ámbito externo, lo que hace posible no solo devolver valores, sino también modificar variables desde el ámbito de llamada. Esto puede ser particularmente útil cuando necesitas modificar múltiples variables o cuando trabajas con estructuras de datos grandes donde pasar por valor (copiar) sería demasiado intensivo en recursos.

El equivalente a trabajar con apuntadores

no sabia que podia hacer eso.

muy interesantes &$variables y asume el lugar donde se guardo el valor en memoria, perimiéndome editar una variable de ámbito global sin definirla como global.

Sería equivalente a poner dentro de la función
global $cat
y no ponerle ningún parámetro a la función

Codigo de la clase

<?php
$cat = "meow";

function make_a_cat_bark(&$cat_dog){
    $cat_dog = "woof";
}



make_a_cat_bark($cat);
echo $cat;
echo "\n";


?>