Curso gratuito de PHP. Regístrate para hacer un seguimiento de tu progreso →

PHP: Parámetros opcionales de las funciones

En programación, muchas funciones y métodos tienen parámetros que rara vez cambian. En estos casos, se les asignan valores predeterminados que se pueden cambiar según sea necesario. En esta lección aprenderemos cómo asignar valores predeterminados. Esto nos permite reducir la cantidad de código repetitivo:

<?php

// Función de potencia
// El segundo parámetro tiene un valor predeterminado de 2
function myPow($x, $base = 2)
{
    return $x ** $base;
}

// Tres al cuadrado (dos es el valor predeterminado)
myPow(3); // 3 * 3 = 9
// Tres al cubo
myPow(3, 3); // 3 * 3 * 3 = 27

El valor predeterminado se asigna como una asignación normal en la definición. Solo se utiliza si el parámetro no se pasa. Hay que acostumbrarse a esto.

Incluso puede haber un valor predeterminado cuando solo hay un parámetro:

<?php

function myPrint($text = 'nothing')
{
    print_r($text);
}

myPrint(); // => "nothing"
myPrint("Hexlet"); // => "Hexlet"

Puede haber cualquier cantidad de parámetros con valores predeterminados:

<?php

function f($a = 5, $b = 10, $c = 100)
{
  ...
}

Los valores predeterminados tienen una restricción. Deben ir al final de la lista de parámetros. Desde el punto de vista de la sintaxis, no es posible crear una función con un parámetro opcional seguido de uno obligatorio:

<?php

// Este código dará un error
function f($a = 5, $b = 10, $c = 100, $x)
{
  ...
}

// Y este también
function f($a = 5, $b = 10, $x, $c = 100)
{
  ...
}

// Pero este funcionará
function f($x, $a = 5, $b = 10, $c = 100)
{
  ...
}

// Y este también
function f($x, $y, $a = 5, $b = 10, $c = 100)
{
  ...
}

Tarea

Implementa la función getHiddenCard(), que recibe como argumento el número de una tarjeta de crédito (compuesto por 16 dígitos) como una cadena de texto y devuelve su versión oculta, que se puede utilizar en el sitio web para mostrarla. Si la tarjeta original tenía el número 2034399002125581, entonces la versión oculta se verá así ****5581. En otras palabras, la función reemplaza los primeros 12 caracteres por asteriscos. La cantidad de asteriscos se controla mediante un segundo parámetro opcional. El valor predeterminado es 4.

<?php

// La tarjeta de crédito se pasa como una cadena de texto
getHiddenCard("1234567812345678", 2); // "**5678"
getHiddenCard("1234567812345678", 3); // "***5678"
getHiddenCard('1234567812345678'); // "****5678"
getHiddenCard('2034399002121100', 1); // "*1100"

Para completar esta tarea, necesitarás la función str_repeat(), que repite una cadena de texto un número determinado de veces.

<?php

str_repeat('+', 5); // "+++++"
str_repeat('o', 3); // "ooo"
¿El ejercicio no pasa la prueba, qué debo hacer? 😶

Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.

Mi código funciona en mi entorno, pero no aquí 🤨

Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.

Mi código es diferente a la solución del profesor 🤔

Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.

En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.

Leí la lección, pero no entendí nada 🙄

Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.

Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.


¿Encontraste un error? ¿Quieres añadir algo? Las solicitudes de extracción son bienvenidas. https://codica.la/errores
Si te encuentras con dificultades y no sabes qué hacer, pregunta en nuestra gran y amigable comunidad