10 - Parámetros opcionales.


Esta característica está presente tanto para programación estructurada como para programación orientada a objetos. Un parámetro es opcional si en la declaración del método le asignamos un valor por defecto. Si luego llamamos al método sin enviarle dicho valor tomará el que tiene por defecto.

Con un ejemplo se verá más claro: Crearemos nuevamente la clase CabeceraDePagina que nos muestre un título alineado con un determinado color de fuente y fondo.

pagina1.php

<html>
<head>
<title>Pruebas</title>
</head>
<body>
<?php
class CabeceraPagina {
  private $titulo;
  private $ubicacion;
  private $colorFuente;
  private $colorFondo;
  public function __construct($tit,$ubi='center',$colorFuen='#ffffff',$colorFon='#000000')
  {
    $this->titulo=$tit;
    $this->ubicacion=$ubi;
    $this->colorFuente=$colorFuen;
    $this->colorFondo=$colorFon;
  }
  public function graficar()
  {
    echo '<div style="font-size:40px;text-align:'.$this->ubicacion.';color:';
    echo $this->colorFuente.';background-color:'.$this->colorFondo.'">';
    echo $this->titulo;
    echo '</div>';
  }
}

$cabecera1=new CabeceraPagina('El blog del programador');
$cabecera1->graficar();
echo '<br>';
$cabecera2=new CabeceraPagina('El blog del programador','left');
$cabecera2->graficar();
echo '<br>';
$cabecera3=new CabeceraPagina('El blog del programador','right','#ff0000');
$cabecera3->graficar();
echo '<br>';
$cabecera4=new CabeceraPagina('El blog del programador','right','#ff0000','#ffff00');
$cabecera4->graficar();
?>
</body>
</html> 

En esta clase hemos planteado parámetros opcionales en el constructor:

  public function __construct($tit,$ubi='center',$colorFuen='#ffffff',$colorFon='#000000')
  {
    $this->titulo=$tit;
    $this->ubicacion=$ubi;
    $this->colorFuente=$colorFuen;
    $this->colorFondo=$colorFon;
  }

El constructor tiene 4 parámetros, uno obligatorio y tres opcionales, luego cuando lo llamemos al crear un objeto de esta clase lo podemos hacer de la siguiente forma:

$cabecera1=new CabeceraPagina('El blog del programador');

En este primer caso el parámetro $tit recibe el string 'El blog del programador' y los siguientes tres parámetros se inicializan con los valores por defecto, es decir al atributo $ubicacion se carga con el valor por defecto del parámetro que es 'center'. Lo mismo ocurre con los otros dos parámetros del constructor.

Luego si llamamos al constructor con la siguiente sintaxis:

$cabecera2=new CabeceraPagina('El blog del programador','left');

el parámetro $ubi recibe el string 'left' y este valor remplaza al valor por defecto que es 'center'.

También podemos llamar al constructor con las siguientes sintaxis:

$cabecera3=new CabeceraPagina('El blog del programador','right','#ff0000');
.....
$cabecera4=new CabeceraPagina('El blog del programador','right','#ff0000','#ffff00');

Veamos cuales son las restricciones que debemos tener en cuenta cuando utilizamos parámetros opcionales:

  • No podemos definir un parámetro opcional y seguidamente un parámetro obligatorio. Es decir los parámetros opcionales se deben ubicar a la derecha en la declaración del método.
  • Cuando llamamos al método no podemos alternar indicando algunos valores a los parámetros opcionales y otros no. Es decir que debemos pasar valores a los parámetros opcionales teniendo en cuenta la dirección de izquierda a derecha en cuanto a la ubicación de parámetros. Para que quede más claro no podemos no indicar el parámetro $ubi y sí el parámetro $colorFuen (que se encuentra a la derecha).
    Es decir debemos planificar muy bien que orden definir los parámetros opcionales para que luego sea cómodo el uso de los mismos.

Podemos definir parámetros opcionales tanto para el constructor como para cualquier otro método de la clase. Los parámetros opcionales nos permiten desarrollar clases que sean más flexibles en el momento que definimos objetos de las mismas.

Retornar