Se puede definir una función en PHP para aceptar uno o más parámetros. Los parámetros de función son una lista de expresiones separadas por comas dentro del paréntesis delante del nombre de la función al definir una función. Un parámetro puede ser de cualquier tipo escalar (número, cadena o booleano), una matriz, un objeto o incluso otra función.

functionfoo($arg_1,$arg_2,$arg_n){
   statements;return$retval;}

Los argumentos actúan como las variables que se procesarán dentro del cuerpo de la función. Por lo tanto, siguen las mismas convenciones de nomenclatura que cualquier variable normal, es decir, deben comenzar con «$» y pueden contener alfabetos, dígitos y guiones bajos.

Nota: No hay ninguna restricción en cuanto al número de parámetros que se pueden definir.

Cuando es necesario llamar a una función parametrizada, debe asegurarse de que se le pase el mismo número de valores que en el número de argumentos de la definición de la función.

foo(val1, val2, val_n);

Una función definida con parámetros puede producir un resultado que cambia dinámicamente en función de los valores pasados.

Ejemplo

El siguiente código contiene la definición de la función addition() con dos parámetros y muestra la suma de los dos. La salida en tiempo de ejecución depende de los dos valores pasados a la función.

<?php
   function addition($first, $second) {
      $result = $first+$second;
      echo "First number: $first \n";
      echo "Second number: $second \n"; 
      echo "Addition: $result";
   }

   addition(10, 20);

   $x=100;
   $y=200;
   addition($x, $y);
?>

Producirá el siguiente resultado:

First number: 10 
Second number: 20 
Addition: 30 
First number: 100 
Second number: 200 
Addition: 300

Argumentos formales y reales

A veces, el término argumento se usa para el parámetro. En realidad, los dos términos tienen una cierta diferencia.

  • Un parámetro se refiere a la variable utilizada en la definición de la función, mientras que un argumento se refiere al valor pasado a la función durante la llamada.
  • Un argumento puede ser un literal, una variable o una expresión
  • Los parámetros de una definición de función también se denominan a menudo argumentos formales, y lo que se pasa se denomina argumentos reales.
  • Los nombres de los argumentos formales y los argumentos reales no tienen por qué ser los mismos. El valor del argumento real se asigna al argumento formal correspondiente, de izquierda a derecha.
  • El número de argumentos formales definidos en la función y el número de argumentos reales pasados deben ser los mismos.

Ejemplo

PHP lanza un ArgumentCountError cuando el número de argumentos reales es menor que los argumentos formales. Sin embargo, los argumentos reales adicionales se ignoran si son más que los argumentos formales.

<?php
   function addition($first, $second) {
      $result = $first+$second;
      echo "First number: $first \n";
      echo "Second number: $second \n";
      echo "Addition: $result \n";
   }

   # Actual arguments more than formal arguments
   addition(10, 20, 30);

   # Actual arguments fewer than formal arguments
   $x=10;
   $y=20;
   addition($x);
?>

Producirá el siguiente resultado:

First number: 10 
Second number: 20 
Addition: 30 
PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments
to function addition(), 1 passed in /home/cg/root/20048/main.php
on line 16 and exactly 2 expected in /home/cg/root/20048/main.php:2

Discrepancia de tipos de argumentos

PHP es un lenguaje de tipado dinámico, por lo que no aplica la comprobación de tipos cuando se copia el valor de un argumento real con un argumento formal. Sin embargo, si alguna instrucción dentro del cuerpo de la función intenta realizar una operación específica de un tipo de datos en particular que no lo admite, PHP genera una excepción.

En la función addition() anterior, se supone que se pasan argumentos numéricos. PHP no tiene ninguna objeción si se pasan argumentos de cadena, pero la sentencia que realiza la adición encuentra una excepción porque la operación «+» no está definida para el tipo de cadena.

Ejemplo

Echa un vistazo al siguiente ejemplo:

<?php
   function addition($first, $second) {
      $result = $first+$second;
      echo "First number: $first \n";
      echo "Second number: $second \n";
      echo "Addition: $result";
   }

   # Actual arguments are strings
   $x="Hello";
   $y="World";
   addition($x, $y);
?>

Producirá el siguiente resultado:

PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string + string in hello.php:5

Sin embargo, PHP es un lenguaje de tipado débil. Intenta convertir las variables en un tipo compatible en la medida de lo posible. Por lo tanto, si uno de los valores pasados es una representación de cadena de un número y el segundo es una variable numérica, entonces PHP convierte la variable de cadena a numérico para realizar la operación de suma.

Ejemplo

Echa un vistazo al siguiente ejemplo:

<?php
   function addition($first, $second) {
      $result = $first+$second;
      echo "First number: $first \n";
      echo "Second number: $second \n";
      echo "Addition: $result";
   }

   # Actual arguments are strings
   $x="10";
   $y=20;
   addition($x, $y);
?>

Producirá el siguiente resultado:

First number: 10 
Second number: 20 
Addition: 30