Mediante el paso de parámetro por referencia a la función anónima, se puede cambiar el valor de la variable $where_am_i, devolviendo “Colombia” al hacer echo de la misma.
Introducción
¿Debería seguir usando versiones antiguas de PHP?
Documentación: la biblia de PHP
¿Qué es PHP Doc?
Entornos virtuales
¿Para qué sirven los entornos virtuales?
Creando un entorno virtual con Vagrant
Creando un entorno virtual con Laragon
¿Qué son los Virtual Hosts?
Configurando Virtual Hosts en Windows
Configurando Virtual Hosts en Linux
Configurando Virtual Hosts en macOS
PHP con esteroides
Constantes en PHP
¿Variables... variables?
Scope de PHP
Variables superglobales
Redirecciones
Match
Funciones a profundidad
Funciones variables
Parámetros por referencia
Argumentos a profundidad
Named arguments
Funciones anónimas
Arrow functions
Declaraciones de tipo escalar
Declaraciones de tipo devolución
Cierre
Aprendamos sobre cookies, sesiones y modularización de código
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Convierte tus certificados en títulos universitarios en USA
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Aportes 38
Preguntas 1
Mediante el paso de parámetro por referencia a la función anónima, se puede cambiar el valor de la variable $where_am_i, devolviendo “Colombia” al hacer echo de la misma.
Tengo entendido que en el reto la salida será Mexico, ya que no es posible modificar una variable desde este tipo de funciones, sin embargo al usar parámetro por referencia hará que sea Colombia. 🤯
es Colombia debido al parametro por referencia
soy de Colombia :'v
Colombia
<?php
// Lee variables del ámbito global
$cajero = 10;
$add_cajero = fn($add) => $cajero + $add;
echo $add_cajero(20) . PHP_EOL; // 30
// No se puede modificar un variable del ámbito global desde una arrow function
$cajero2 = 10;
$add_cajero2 = fn($add) => $cajero += $add;
$add_cajero2(5);
$add_cajero2(5);
$add_cajero2(6);
echo $cajero2 . PHP_EOL; // 10
// Otro ejemplo
$edades = [5, 21, 50, 9 ,18];
$mayores_de_edad = array_filter($edades, fn($current) => $current >= 18);
echo implode(" ", $mayores_de_edad) . PHP_EOL; // 21 50 18
// Yes
$where_am_i = "México";
$change_where_am_i = fn(&$where_am_i) => $where_am_i = "Colombia";
$change_where_am_i($where_am_i);
echo $where_am_i . PHP_EOL; // Colombia
El resultado es Colombia
Colombia, puesto que al pasar la variable como referencia, le indica al sistema cuál es su ubicación en memoria por lo que permite cambiar su valor real.
Debido al parámetro por referencia es Colombia .
Sería “Colombia” ya que pasa esa variable por referencia a dicha arrow function, para que pueda cambiar el contenido de la misma.
El resultado es Colombia, debido a que estamos usando el lugar donde esta almacenado la variable en memoria para poder sobre escribirla. muy chulo… no pensé que podía hacer uso de las variables por referencias.
estaba pensando que devolvería México por que estaba pensando en solo esta clase y tenia entendido que con las arrow function no podíamos escribir en una variable de ámbito global pero volví a repasar la clase de paso por referencia y en realidad no estamos escribiendo es como si al imprimir $where_am_i estuviéramos enviando desde un inicio al espacio en memoria el nombre de Colombia. así que esa es la respuesta.
esa fue mi forma de entenderlo y analizarlo no se si estuvo o esta bien pero así di con la respuesta.
colombia. Retaxmaster.
El secreto está en la segunda línea, con el &.
No olvides que una arrow función solo lee la variable, pero en este caso está leyendo su referencia en memoria.
¿Entonces porque $where_am_i = “Colombia”? Esto ocurre porque cambio el valor en la referencia, NO en la variable.
Puede que me equivoque, pero entiendo que esto es lo que ocurre.
colombia
Colombia por el parametro por referencia
Crape diem:
Umm… muy interesante este reto. Tal como está escrito el código estamos utilizando un solo espacio de memoria todo el tiempo, por ello la variable cambia su valor inicial de “México” a “Colombia”.
Pero si quitamos el símbolo & en la arrow function, tenemos en realidad dos variables que llevan el mismo nombre pero con su espacio de memoria individual. Por ello aunque la arrow function logra poner el valor “Colombia”, la función echo está mostrando el valor de la primera variable “México”.
Saluti,
Fabricio
Colombia
La respuesta será Colombia
ya que esta pasando un parámetro por referencia.
La respuesta es Colombia, ya que al utilizar el &, el paso del parámetro es por referencia.
Colombia
La respuesta es Colombia porque el paso del parámetro es por referencia, de loo contario sería México porque las arrow function no pueden modificar variables globales.
La respuesta del Retax es Colombia.
Las arow functions no funcionan para escribir variables del ambito global, es decir solo las leen por lo que tu no puedes hacer :
$cajero = 10;
$add_cajero = fn($add) => $cajero += $add; //no escribe las variables globales
$add_cajero(5);
$add_cajero(5);
$add_cajero(6);
echo $cajero //seguira siendo 10 en lugar de 26
Colombia
Si pienso que es Colombia
Colombia
Colombia
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?