---

name: Parámetros opcionales de las funciones
theory: |
  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
  <?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
  <?php

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

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

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

  ```php
  <?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
  <?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)
  {
    ...
  }
  ```
instructions: |

  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
  <?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()](https://www.php.net/manual/es/function.str-repeat.php), que repite una cadena de texto un número determinado de veces.

  ```php
  <?php

  str_repeat('+', 5); // "+++++"
  str_repeat('o', 3); // "ooo"
  ```
