Cómo funcionan las funciones en php. Llamar funciones a través de variables

Asi que, ¿Qué es una función (función) enPHP?

función (función) este es un mini-programa que realiza algunas acciones útiles y produce un resultado final.
Veamos el esquema:

Intentemos escribir un mini programa utilizando una plantilla de función preparada.
Plantilla de función lista:

Digamos que necesitamos escribir una función que pueda calcular la suma de los números 5 y 2. Miramos la plantilla y escribimos:

Desglosemos el código.
function suma() es una función llamada suma ;
eco 5+2; - en el cuerpo de la función, indicamos que los números 5 y 2 deben sumarse (5 + 2) ;
suma(); - llamar a la función. Llamar a una función significa ejecutarla. Es decir, se debe completar la tarea 5 + 2 y dar el resultado 7 .

Ahora tratemos de considerar las funciones en etapas.

Pasos para crear una función en PHP

Escenarioyo. Crear una función
Recuerde la plantilla de función terminada:

Así es como se crea una función en PHP.
Escribamos el texto en el cuerpo de la función " Me alegro de verte en el blog».
Simplemente no lo olvide: escribimos el texto a través de .

"; } ?>

Ahora necesitamos llamar a la función "sitio()".

EscenarioII. Llamar a una función preparada enPHP
La función ha sido creada y ahora debe ejecutarse. Para ejecutar y generar una función, basta con especificar “nombre de la función (); »

sitio web();

Se verá así:

Funciones de PHP - sitio "; ) sitio(); ?>

También puedes hacerlo así:

Funciones de PHP - sitio "; ) ?> Mucho texto…..Montón de texto....

Introduzca la dirección en el navegador:

Resultado:

Funciones de PHP con argumentos

Todos los ejemplos con funciones anteriores no tenían argumentos. Qué es un argumento, te lo explicaré en código:

Así que creé una función llamada "sitio". En los parámetros (donde hay corchetes) he escrito dos variables $a y $b separadas por comas.

Sitio de función ($a, $b)

$a y $b son los dos argumentos.
echo "$a + $b = "; - aquí traje el texto al monitor. Resultado: 5 + 5 =
echo $a + $b; - aquí le dije a la función que la variable $a y $b deberían sumarse.
sitio (15, 5); - llamada la función. Atención: entre paréntesis indiqué dos argumentos (15, 5) que están esperando las variables $a y $b. La variable $a recibirá el primer argumento - 15 , $b - el segundo 5 .

Para aquellos que no entienden dónde se sustituye el argumento y en qué orden, aquí está el esquema:

Así que aquí está el código terminado:



Guárdelo como "function.php" en la carpeta "test-1" del servidor local (vea la lección 1).

Introduzca la dirección en el navegador:

https://localhost/prueba-1/función.php

Resultado:

Permítanme complicar un poco la función y hacerla más interesante. Agregaré la dirección del blog al argumento y escribiré el nombre del enlace.

La función llamada "sitio" recibirá el argumento https://sitio/ en la variable $enlace, y la variable $título recibirá el texto del enlace - " Sitio de blog - creación de sitio!»

Código terminado:



Guárdelo como "function.php" en la carpeta "test-1" del servidor local (vea la lección 1).

Introduzca la dirección en el navegador.

Para escribir programas PHP que sean más que un par de páginas de código, y al mismo tiempo convenientemente organizados, necesitas dominar el concepto de función. Las funciones le ahorrarán la molestia de repetir las mismas piezas de código una y otra vez en sus programas. Para obtener una función, debe asignar un nombre a la pieza de código, llamado nombre de función. Después de eso, este fragmento se puede ejecutar refiriéndose a él con este nombre.

La sintaxis básica para usar (o llamar) una función se muestra a continuación:

Nombre_función(expresión_1, expresión_2, ... ,expresión_n)

Esta estructura incluye el nombre de la función seguido de una lista de expresiones de entrada entre paréntesis y separadas por comas (llamadas parámetros reales de la función). Las funciones se pueden llamar con cero o más parámetros reales, según sus definiciones.

Cuando el intérprete de PHP detecta una llamada de función, primero se evalúa cada expresión dada como un parámetro real, y luego los valores resultantes se usan como entrada para esa función. Una vez que la función ha terminado de ejecutarse, el valor devuelto (si lo hay) se convierte en el resultado de la expresión completa con la llamada a la función.

PHP tiene cientos de funciones integradas. Todos los ejemplos a continuación son llamadas válidas a las funciones integradas de PHP:

Llamar a funciones PHP integradas cuadrado(9); // Llamar a la función raíz cuadrada, que // da como resultado el valor 3 rand(10, 10 + 10); // Devuelve un número aleatorio de 10 a 20 strlen("Hay 24 caracteres en esta cadena"); // Devuelve el valor 24 pi(); // Devuelve el valor aproximado del número "pi"

Cada llamada de función es una expresión de PHP, por lo que (al igual que con cualquier otra expresión) solo hay dos razones por las que podría querer incluir una llamada de función en su código: para obtener un valor de retorno o para crear un efecto secundario.

El valor de retorno de una función es el valor de la propia expresión con la llamada a la función. El valor resultante se puede usar para realizar exactamente las mismas acciones para las que se usan los resultados de evaluar cualquier otra expresión. Por ejemplo, dicho valor se puede asignar a una variable:

Código PHP $mi_pi = pi();

Otra opción es que el resultado se pueda anidar en expresiones más complejas, como en el siguiente ejemplo:

codigo PHP $aprox. = sqrt($aprox.) * sqrt($aprox.);

Las funciones también se pueden usar para crear todo tipo de efectos secundarios, incluida la escritura de datos en archivos, la manipulación de bases de datos y la visualización de información en una ventana del navegador. Es perfectamente aceptable usar valores de retorno y crear efectos secundarios al mismo tiempo, por ejemplo, es muy común que una función que crea un efecto secundario devuelva un valor que indica si la función fue exitosa.

El resultado de ejecutar una función puede ser de cualquier tipo, por lo que los arreglos se usan mucho como una forma de devolver múltiples valores de una función a la vez.

Definición de sus propias funciones

El lenguaje PHP le permite prescindir de las funciones definidas por el usuario. Con este lenguaje, puede crear sitios web interesantes y útiles utilizando construcciones de lenguaje básico y un gran conjunto de funciones integradas. Pero si encuentra que los archivos de código se están volviendo más largos y más difíciles de leer, y el mantenimiento se está volviendo más difícil, entonces esto puede ser una señal de que necesita comenzar a envolver parte del código en forma de funciones.

Función es una forma de diseñar una pieza de código y darle un nombre para que la pieza se pueda usar más tarde con solo una línea de código. Las funciones son más útiles cuando el código que contienen debe usarse en más de un lugar, pero también pueden ayudar en situaciones de un solo uso, ya que el código se vuelve mucho más fácil de leer con funciones.

Las definiciones de funciones tienen la siguiente forma:

Función nombre-función ($argumento-1, $argumento-2, ..) ( declaración-1; declaración-2; ... )

Esto significa que las definiciones de funciones constan de las siguientes cuatro partes:

    Palabra clave función.

    El nombre que se le dará a la función.

    Lista de parámetros de función: nombres de variables con el prefijo de un signo de dólar, separados por comas (es posible que falten parámetros).

    Cuerpo de función- un conjunto de operadores encerrados entre llaves.

Al igual que los nombres de variables, los nombres de funciones deben estar compuestos de letras, números y guiones bajos, y no deben comenzar con un número. Pero a diferencia de los nombres de variables, las letras en los nombres de funciones se convierten a minúsculas antes de que el intérprete de PHP almacene las funciones internamente, por lo que las letras en los nombres de funciones no distinguen entre mayúsculas y minúsculas.

El siguiente es un resumen de las acciones que ocurren cuando se llama a una función definida por el usuario:

    El intérprete de PHP busca la función por su nombre (si la función aún no se ha definido, se genera un error).

    El intérprete de PHP sustituye los valores de los parámetros de llamada (o parámetros reales) por las variables en la lista de parámetros de definición (o parámetros formales).

    Se ejecutan las sentencias del cuerpo de la función. Si alguna de las sentencias ejecutadas es declaración de devolución, la función se detiene y devuelve el valor requerido. De lo contrario, la función termina después de que se haya ejecutado la última declaración sin devolver ningún valor.

Ejemplo de definición de función

Como ejemplo, suponga que tiene un código que le permite decidir en qué tamaño de botella comprar un refresco. (Supongamos que la necesidad de usar este código surgirá en un futuro cercano, cuando los compradores en el supermercado puedan usar ampliamente sus navegadores web inalámbricos portátiles para acceder a nuestro conveniente sitio que le permite seleccionar los mejores precios):

codigo PHP $litros_1 = 1.0; $precio_1 = 1,59; $litros_2 = 1,5; $precio_2 = 2,09; $por_litro_1 = $precio_1 / $litros_1; $por_litro_2 = $precio_2 / $litros_2; si ($por_litro_1< $per_liter_2) print("Первая сделка лучше!

")

Dado que este tipo de comparación se realiza constantemente en el código del sitio web desarrollado, se hace necesario disponer parte de los operadores de este código que proporcionen la comparación como una función reutilizable. Una forma de resolver este problema se da en el siguiente fragmento, que es una versión modificada de la comparación anterior:

codigo PHP // Definición de la función function better_deal ($cantidad_1, $cantidad_2, $precio_1, $precio_2) ( $por_cantidad_1 = $precio_1 / $cantidad_1; $por_cantidad_2 = $precio_2 / $cantidad_2; // Devuelve algún valor de la función return ($ por_cantidad_1)< $per_amount_2); } $liters_1 = 1.0; $price_1 = 1.59; $liters_2 = 1.5; $price_2 = 2.09; // Вызов функции в условном операторе if (better_deal($liters_1, $liters_2, $price_1, $price_2)) print("Первая сделка лучше!
"); else print ("¡La segunda operación es mejor!
")

La función better_deal resume las tres líneas del código anterior que realizan operaciones aritméticas y de comparación. Esta función toma cuatro números como parámetros reales y devuelve una expresión booleana. Como ocurre con cualquier valor booleano, el valor resultante se puede anidar en la parte de la instrucción if que realiza la comparación.

Aunque la versión modificada que usa la función tiene más código que la versión original, esta versión tiene dos ventajas: primero, la función se puede usar varias veces (lo que reducirá la cantidad total de código) y segundo, si es necesario, cambie la algoritmo de cálculo, será suficiente para hacer cambios en un solo lugar.

Otra opción es incluir declaraciones de salida directamente en la función (como se muestra a continuación) si las comparaciones de precios que se realizan se utilizan únicamente para mostrar información sobre qué opción de compra es más rentable:

codigo PHP // Definición de función function better_deal ($cantidad_1, $cantidad_2, $precio_1, $precio_2) ( $por_cantidad_1 = $precio_1 / $cantidad_1; $por_cantidad_2 = $precio_2 / $cantidad_2; // Sin valor de retorno de la función, // pero algunas acciones se realizan si ($per_amount_1< $per_amount_2) print("Первая сделка лучше!
"); else print ("¡La segunda operación es mejor!
"); ) // Llamar a la función better_deal(1.0, 1.5, 1.59, 2.09);

La primera función usa la instrucción return para devolver un resultado booleano que se usa más adelante en la prueba de la instrucción if. No hay declaración de devolución en la segunda función, porque esta función se usa para obtener un efecto secundario, que es mostrar texto en el navegador del usuario. Después de ejecutar la última declaración de una función determinada, el intérprete de PHP simplemente pasa a ejecutar la siguiente declaración que sigue a la llamada de función.

Usar menos parámetros

¿Qué sucede cuando se llama a una función con menos parámetros reales que la cantidad de parámetros proporcionados en la definición? El lector probablemente ya no se sorprenda de que el intérprete de PHP maneje esta situación sin causar fallas, pero puede emitir un mensaje de advertencia dependiendo de la configuración del sistema de activación de informes de errores.

Si el número de parámetros reales pasados ​​es menor que el número de parámetros formales, entonces el intérprete de PHP trata los parámetros formales vacíos como si fueran variables no asignadas. Pero con la configuración normal para habilitar el informe de errores en PHP5, también aparecerá un mensaje de advertencia en la ventana del navegador.

Por defecto, el sistema de reporte de errores en PHP5 está configurado para mostrar información sobre errores de cualquier tipo, excepto avisos. fase de depuración, que son las condiciones de error menos severas detectadas por este sistema. La razón por la que se muestran mensajes de advertencia para muy pocos parámetros pasados ​​a una función es porque se considera que esta situación requiere advertencias durante la depuración (las advertencias en esta categoría son las segundas más graves).

Si realmente desea usar llamadas a funciones que a veces proporcionan muy pocos parámetros reales, pero no quiere mensajes de advertencia, puede usar una de las siguientes opciones para suprimir los mensajes de advertencia:

    Cambie temporalmente la gravedad de los errores que desencadenan mensajes de error en el script mediante la siguiente declaración:

    codigo PHP error_reporting(E_ALL - (E_NOTICE + E_WARNING));

    El uso de una declaración de este tipo evita que se impriman mensajes de advertencia de tiempo de ejecución y de depuración desde el momento en que aparece la declaración en el script hasta que se produce la siguiente declaración error_reporting(), si corresponde. (Cabe señalar que esta opción es peligrosa, porque se pueden generar mensajes de advertencia no solo en relación con la situación que le interesa, sino también bajo la influencia de muchos otros problemas).

    Suprima los errores que se producen al ejecutar una sola expresión mediante la operación de control de mensajes de error @. El signo de esta operación se puede colocar antes de cualquier expresión para suprimir los mensajes de error que ocurren solo cuando se ejecuta esa expresión. Por ejemplo, si se genera un mensaje de advertencia durante una llamada a my_function() , entonces no ocurre cuando se llama a @my_function() . Cabe señalar que esta opción también es peligrosa, ya que se suprimen todos los tipos de mensajes de error, a excepción de los errores de interpretación.

    codigo PHP ... // Llamar a una función con 2 parámetros en lugar de 4 @better_deal(1.0, 1.5);

Funciones y alcance de las variables

Hablamos sobre el alcance de las variables y la descripción de variables locales, globales, superglobales y estáticas en el artículo anterior "Variables y constantes". Permítanme recordarles que cualquier variable declarada dentro de una función es local, puede hacerse global usando la palabra clave global. Las variables estáticas se utilizan dentro de una función y conservan su valor entre las llamadas a esa función. Las superglobales, representadas como matrices, están disponibles en todas partes.

Alcance de la función

Por supuesto, las reglas para determinar el alcance de los nombres de las variables son bastante simples, y las reglas para determinar el alcance de los nombres de las funciones son aún más simples. PHP5 tiene una sola regla: una función debe definirse una vez (y solo una vez) en el script en el que se usa. El alcance del nombre de función se considera implícitamente global, por lo que una función definida en un script está disponible en cualquier parte de ese script. Pero para facilitar el estudio del código, a menudo se recomienda definir las funciones antes de llamarlas en el código.

En PHP3, las funciones solo se podían usar después de haberlas definido. Esto significa que el enfoque más seguro para el desarrollo en esta versión fue definir todas las funciones al principio de cada escenario en particular, antes de usar cualquiera de esas funciones (o incluir definiciones de todas las funciones).

Y desde la versión PHP5, los scripts en realidad se precompilan antes de que se llamen para su ejecución, y una de las consecuencias de la precompilación es que durante esta operación se encuentran todas las definiciones de funciones antes de que se llame al código para su ejecución. Esto significa que las definiciones de funciones y el código pueden aparecer en cualquier orden en un script, siempre que todas las funciones se definan una vez (y solo una vez). Esto significa que el siguiente código se ejecutará correctamente:

codigo PHP // Llamar a la función sum() antes de que se defina echo sum(15, 26); función suma($a, $b) (retorna $a + $b; )

recursión

Algunos lenguajes compilados, como C y C++, imponen restricciones de ordenamiento de código bastante complicadas sobre cómo deben especificarse las definiciones de funciones. El punto es que para obtener información sobre cómo compilar una función, el compilador debe conocer todas las funciones llamadas en la función dada, lo que significa que las funciones llamadas deben definirse primero. Entonces, ¿qué pasa si dos funciones se llaman entre sí o una función se llama a sí misma?

Problemas como estos a menudo llevaron a los diseñadores del lenguaje C a la idea de que las declaraciones de funciones (o prototipos) deberían estar separadas de las definiciones de funciones (o implementaciones). Esta idea es que se deben proporcionar declaraciones separadas para informar al compilador con anticipación sobre qué tipos de parámetros reales y valores de retorno de funciones se planea usar en el programa. Tales declaraciones contienen suficiente información para que el compilador procese las definiciones reales en cualquier orden.

En PHP, este problema desaparece y, por lo tanto, no es necesario definir prototipos de funciones por separado. Siempre que cada función que se llame se defina en el archivo de código actual o se incluya una vez (y solo una vez) durante la ejecución del script actual, el intérprete de PHP no tiene ningún problema con respecto a la resolución de nombres al llamar funciones, sin importar en qué orden, Se incluyen llamadas a funciones y definiciones de funciones.

Esto significa que desde la versión de PHP4 es posible definir sin ningún problema funciones recursivas(funciones que se llaman a sí mismas). Por ejemplo, como se muestra a continuación, puede definir una función recursiva y luego llamarla inmediatamente:

codigo PHP función cuenta regresiva ($ cuenta) ( if ($ cuenta > 0) ( echo "Número $ cuenta
"; // cuenta regresiva de recurrencia (-- $ cuenta); ) ) cuenta regresiva (10);

Como resultado, se muestra el siguiente resultado en la ventana del navegador:

Un ejemplo de uso de recursividad en PHP

Al igual que con cualquier función recursiva, debe asegurarse de que la función tenga una ruta base (rama no recursiva) además de la ruta recursiva, y asegurarse de que esta ruta base finalmente se atraviese. Si la ejecución de la función no sigue la ruta base, entonces la situación se parece mucho a usar un bucle while, en el que la prueba siempre da como resultado un valor verdadero, por lo que se creará un bucle interminable de llamadas a funciones.

En el caso de la función anterior, se sabe que la ejecución eventualmente seguirá la ruta base, porque cada vez que se llama a la función en la ruta recursiva, el valor de cuenta regresiva (cuenta regresiva, de ahí el nombre de la función en sí) disminuye y eventualmente debería convertirse en cero. Por supuesto, esto supone que el parámetro de entrada de la función debe ser un número entero positivo, no un número entero negativo o un número de punto flotante de precisión doble. Cabe señalar que la prueba de condición "mayor que cero" proporcionada en la definición de la función sirve como garantía contra la recursividad infinita incluso en estos casos, mientras que la prueba de condición "distinto de cero" no proporciona esto.

Del mismo modo, sin ningún problema operar funciones mutuamente recursivas(funciones que se llaman entre sí secuencialmente). Por ejemplo, la siguiente llamada de función con la definición especificada:

codigo PHP function countdown_first($count) ( if ($count > 0) ( echo "Llamar a countdown_first: $count
"; // Recurrir a otra función countdown_second(--$count); ) ) function countdown_second($count) ( if ($count > 0) ( echo "Call countdown_second: $count
"; // Recurrir a otra función countdown_first(--$count); ) ) countdown_first(5);

da como resultado el siguiente resultado en la ventana del navegador:


Funciones mutuamente recursivas

Número variable de parámetros

Los programas a menudo necesitan tener una serie de parámetros reales que varían según la situación en la que se llama a la función. A continuación se enumeran tres formas posibles de resolver este problema en PHP:

  • Defina una función con parámetros predeterminados. Cualquier parámetro que falte en la llamada de función se establecerá en el valor predeterminado, por lo que no habrá ningún mensaje de advertencia sobre la falta de parámetros requeridos.

    Utilice un parámetro de matriz para almacenar valores. El código de llamada es responsable de llenar la matriz y el cuerpo de la función debe proporcionar la extracción correcta de parámetros de la matriz.

    Utilice funciones con un número variable de parámetros (func_num_args(), func_get_arg() y func_get_args()).

Las siguientes secciones discuten cada una de estas opciones por separado.

Opciones predeterminadas

Para definir una función con parámetros por defecto, basta con sustituir el nombre del parámetro formal por una expresión con un operador de asignación. Si la llamada real toma menos parámetros que la cantidad de parámetros formales provistos en la definición de la función, entonces el intérprete de PHP reemplaza los parámetros formales con los parámetros reales hasta que se agota la lista de parámetros reales, y luego usa los operadores de asignación predeterminados para reemplazar el resto de parámetros formales parámetros.

Por ejemplo, en la siguiente función, todos los parámetros se definen con valores predeterminados:

codigo PHP función tour_guide($ciudad = "Moscú", $desc = "gran metrópolis", $cuántos = "14 millones") ( print(" $ciudad

"); ) tour_guide(); tour_guide("Komarovo"); tour_guide("Komarovo", "pequeño pueblo"); tour_guide("Komarovo", "pequeño pueblo", "40");

La ventana del navegador genera un resultado similar al siguiente:


Número variable de parámetros al llamar a una función

La principal limitación del método basado en el uso de parámetros por defecto es que la concordancia entre los parámetros reales y los parámetros formales viene determinada por el orden de ambos. La coordinación se lleva a cabo de acuerdo con el principio de "primero en llegar, primero en ser atendido" (basado en el principio de cola secuencial).

Uso de matrices para reemplazar múltiples parámetros

Si no está satisfecho con la falta de flexibilidad en la forma en que usa múltiples parámetros, puede eliminar por completo la necesidad de conciliar los parámetros reales y formales, teniendo en cuenta sus posiciones. Para hacer esto, puede usar una matriz como medio de comunicación entre el código de llamada y la función.

En el siguiente fragmento de código se proporciona un ejemplo de cómo usar este método; también utiliza algunas otras construcciones prácticas, como el operador ternario y la matriz asociativa (si aún no está familiarizado con las matrices, le recomiendo que se salte este ejemplo por ahora):

codigo PHP function tour_brochure($arr) ( $city = isset($arr["city"]) ? $arr["city"] : "Moscú"; $desc = isset($arr["desc"]) ? $arr[ "desc"] : "gran metrópolis"; $cuantos_muchos = isset($arr["cuantos_cuantos"]) ? $arr["cuantos_cuantos"] : "14 millones"; print(" $ciudad este es el $desc donde reside la persona $cuántas personas.

"); ) // Array vacío tour_brochure(array()); // Array con valores $tour = array("city" => "Komarovo", "desc" => "pequeño pueblo", "how_many" = > 40 );tour_brochure($tour);

Esta función verifica si un solo parámetro de entrada, representado como una matriz, tiene tres valores diferentes asociados con filas específicas. Usando el operador condicional triple (? :), a las variables locales se les asigna el valor entrante (si está almacenado en una matriz) o fragmentos de texto predeterminados. En este ejemplo, la función tour_brochure se llama primero con una matriz vacía (que corresponde a la situación sin parámetros reales) y luego con una matriz que almacena los tres valores de los elementos de la matriz asociativa.

Usando múltiples opciones

A partir de la versión 4, PHP proporciona varias funciones que se pueden usar en el cuerpo de funciones definidas por el usuario para recuperar datos de cantidad y valores de parámetros. Estas características se describen a continuación:

función func_num_args()

No toma parámetros y devuelve datos sobre el número de parámetros pasados ​​a la función desde la que se llama.

función func_get_arg()

Toma un parámetro entero n y devuelve el parámetro n a la función desde la que se llama. La numeración de parámetros comienza desde cero.

función func_get_args()

No toma parámetros y devuelve una matriz que contiene todos los parámetros de la función desde la que se llama, los índices de esta matriz comienzan desde cero.

Estas tres funciones generan un mensaje de advertencia cuando se las llama fuera del cuerpo de la función, y func_get_arg() emite un mensaje de advertencia cuando se las llama con un índice mayor que el índice del último parámetro pasado.

Al usar estas funciones para crear una función definida por el usuario que decodifique los parámetros recibidos, puede aprovechar el hecho de que en el intérprete de PHP no se consideran erroneos llamadas de función en las que el número de parámetros reales excede el número de parámetros formales en la definición. Es bastante fácil definir la función como si no tomara ningún parámetro y luego usar las funciones especificadas para interceptar cualquier parámetro realmente pasado.

Como ejemplo, considere una función a la que puede pasar cualquier número de números y que calcula su suma:

codigo PHP función Suma() ( $suma = 0; for ($i = 0; $i< func_num_args(); $i++) { $sum += func_get_arg($i); } return $sum; } echo "5 + 120 + 8 = ".Sum(5, 120, 8); echo "
10 - 18 + 104 + 2 = ".Suma(10, -18, 104, 2);

La función Sum() usa func_get_arg() para obtener parámetros individuales y limita el ciclo utilizando los resultados de func_num_args() para que no se intente obtener más parámetros de los que realmente se pasaron.

Llamar por valor

De forma predeterminada, las funciones definidas por el usuario en PHP funcionan según el valor de la llamada. Esto significa que cuando se pasan parámetros a una llamada de función, el intérprete de PHP crea una copia de los valores de esos parámetros para pasar a la función. Por lo tanto, cualquier acción realizada en la función no permite cambiar los valores de los parámetros reales presentes en la llamada a la función.

Esta organización del trabajo tiene sus ventajas y desventajas. Por un lado, sirve como garantía de la inmutabilidad de estos parámetros si la función está destinada únicamente a recibir un valor de retorno con ella, pero puede convertirse en una fuente de confusión y dificultades si de hecho se requiere usar la función para cambiar los valores de los parámetros que se le pasan.

Una de las diferencias más importantes entre PHP5 y versiones anteriores es que efectivamente siempre pasa instancias de objetos por referencia, aunque los parámetros de un tipo diferente se pasan por valor. Esto se debe a que, en PHP5, las variables de objeto almacenan los identificadores de los objetos, no los objetos en sí mismos, por lo que en el modo de paso por valor, los identificadores en sí se copian, no los objetos subyacentes (se dará una discusión más detallada de este problema). en el apartado de programación orientada a objetos en PHP).

A continuación se muestra un ejemplo de una función muy simple que aumenta en 10 el número que se le pasa en el parámetro:

codigo PHP \$número= $número
"; función sumar10($a) ( $a += 10; echo "Llamar a la función sumar10() ... , resultado: $a
\$número

Como puede ver en la captura de pantalla a continuación, la llamada a la función no afectó el valor de la variable $number en sí y permaneció igual a 20:


Pasar parámetros de función por valor

Llamar por referencia

PHP proporciona dos formas diferentes en las que puede realizar cambios en los parámetros de estas funciones en las funciones: el método que utiliza la definición de la función y el método basado en la llamada a la función.

Si desea definir una función que afecte directamente al parámetro pasado, simplemente coloque un carácter ampersand delante del parámetro formal en la definición de la función, como se muestra a continuación:

codigo PHP $número = 20; echo "Inicialmente \$número= $número
"; funcion sumar10( &$a) ( $a += 10; echo "Llamar a la función add10() ... , resultado: $a
"; return $a; ) add10($number); echo "Valor \$número después de llamar a la función add10(): $número";

Ahora, después de hacer exactamente la misma llamada de función, la variable $número se cambia a 30:


Pasar parámetros de función por referencia

El caso es que en este caso el parámetro formal $a se refiere a la variable $número, por lo que su modificación en la función lleva al cambio de la variable $número.

Desde PHP4, las referencias a variables también se pueden usar fuera de las llamadas a funciones. En general, asignar una referencia de variable a una variable (por ejemplo, &$varname) hace que los nombres de las dos variables se conviertan en alias entre sí, en lugar de variables separadas con el mismo valor. Considere un ejemplo:

codigo PHP $nombre_1 = "Alejandro"; $nombre_2 = "Igor"; // Pasar una variable por valor $alias_1 = $name_1; // Pasar una variable por referencia $alias_2 = &$name_2; // Cambiar la variable $alias_1 no cambia $name_1 $alias_1 = "Dmitry"; echo "\$alias_1 = $alias_1, \$nombre_1 = $nombre_1

"; // Cambiar la variable $alias_2 conduce a un cambio en $name_2 // porque están interconectados a través de un enlace $alias_2 = "Peter"; echo "\$alias_2 = $alias_2, \$name_2 = $name_2

";

lo que da como resultado el siguiente resultado en la ventana del navegador:


Pasar una variable por referencia

Variables como funciones

Un truco aún más sutil que se puede usar en PHP es usar variables en la posición de los nombres de funciones definidas por el usuario. Esto significa que en lugar de ingresar un nombre de función literal en el código, puede ingresar una variable con un signo de dólar. En este caso, qué función se llama realmente en tiempo de ejecución depende del contenido de la cadena asignada a esa variable.

En cierto sentido, esto permite que las funciones se utilicen como datos. Esta técnica debería ser familiar para los programadores expertos en C, e incluso para los usuarios novatos de alguna forma de Lisp (como Scheme o Common Lisp). En particular, las siguientes dos llamadas a funciones son completamente equivalentes:

codigo PHP función sum($a, $b) ( return $a + $b; ) echo sum(10, 15)."
"; // Pasar una función a una variable y llamarla $var = "sum"; echo $var(12, 14);

Debido a que los nombres de las funciones se pueden tratar simplemente como cadenas, también se pueden usar como parámetros de funciones o devolverse como resultados de funciones.

Bucles Procesamiento de línea 1 2 3 4 5 6 7 8 9 10

Etc. Debe implementar su propia función contenedora para que las construcciones anteriores funcionen con funciones variables.

Beispiel #1 Trabajar con funciones a través de variables

funcionfoo()(
echo "En foo()
\n" ;
}

barra de funciones ($arg = "" )
{
eco "En bar(); el argumento era "$argumentos".
\n" ;
}

// función contenedora para echo
función echoit($cadena)
{
echo $cadena;
}

$func = "foo";
función(); // Llama a la función foo()

$función = "barra";
$función("prueba"); // Llama a la función bar()

$función = "eco";
$función("prueba"); // Llama a la función echoit()
?>

También puede llamar a métodos en un objeto usando las funciones variádicas de PHP.

Beispiel #2 Acceso a métodos de clase con variables

clase Foo
{
variable de función ()
{
$nombre = "Barra" ;
$esto -> $nombre(); // Llamar al método Bar()
}

Barra de funciones()
{
echo "Este es Bar";
}
}

$foo = new Foo();
$nombrefunción = "Variable" ;
$foo -> $nombrefunción(); // Referirse a $foo->Variable()

?>

Al llamar a métodos estáticos, la llamada a la función es "más fuerte" que el operador de acceso a la propiedad estática:

Beispiel #3 Ejemplo de llamada de método variable con propiedad estática

clase Foo
{
estática $variable = "propiedad estática";
función estática Variable()
{
eco "Llamada de método variable";
}
}

echo Foo :: $variable; // Esto generará "propiedad estática". La variable $ se resolverá en el ámbito correcto.
$variable = "variable" ;
foo :: $variable(); // Esto llamará a $foo->Variable() leyendo $variable desde este ámbito.

?>

A partir de PHP 5.4.0, puede llamar invocable-función colocada en una variable.

Ejemplo #4 Funciones invocables

clase Foo
{
barra de función estática()
{
echo "barra\n" ;
}
base de funciones ()
{
echo "base\n";
}
}

$función = array("Foo", "barra");
función(); // imprime "barra"
$func = array(nuevo Foo, "baz");
función(); // salida "baz"
$func = "Foo::barra";
función(); // imprime "barra" en PHP 7.0.0 y superior; en versiones anteriores esto resultará en un error fatal
?>

ver también es_llamable(), call_user_func(), variables variables y función_existe().

Lista de cambios

Hace 8 años

$wget
$ grep -l "\$\.\.\." php-fragmentado-xhtml/función.*.html

Lista de funciones que aceptan argumentos variables.
array_diff_assoc()
array_diff_key()
array_diff_uassoc()
formación()
array_intersect_ukey()
matriz_mapa()
array_merge()
array_merge_recursive()
array_multisort()
array_push()
array_replace()
array_replace_recursive()
array_unshift()
call_user_func()
call_user_method()
compacto()
dba_open()
dba_popen()
eco()
reenviar_llamada_estática()
fprintf()
fscanf()
httprequestpool_construct()
ibase_ejecutar()
ibase_set_event_handler()
ibase_wait_event()
Está establecido()
lista()
maxdb_stmt_bind_param()
maxdb_stmt_bind_result()
mb_convert_variables()
newt_checkbox_tree_add_item()
newt_grid_h_close_stacked()
newt_grid_h_stacked()
newt_grid_v_close_stacked()
newt_grid_v_stacked()
newt_win_choice()
newt_win_entries()
newt_win_menu()
newt_win_message()
newt_win_ternary()
embalar()
imprimirf()
registro_función_apagado()
register_tick_function()
sesión_registrar()
establecerlocal()
sprintf()
escanear()
desarmar()
var_dump()
w32api_deftype()
w32api_init_dtype()
w32api_invoke_function()
wddx_add_vars()
wddx_serialize_vars()
?>

hace 3 años

Una pequeña pero útil nota. Si intenta llamar a una función estática desde un espacio de nombres diferente, debe usar el espacio de nombres completo, incluso si tienen los mismos espacios de nombres de nivel superior. Por ejemplo, si tiene la siguiente clase para llamar:

espacio de nombres Proyecto \ TestClass ;
prueba de clase(
función estática funcToCall()(
devolver "prueba";
}
}
?>
Debes llamarlo como:
espacio de nombres Proyecto\OtraClasePrueba;
clase OtraPrueba(
$funcion = "\Proyecto\TestClass::funcToCall";
función();
}
}
?>
y no:
clase OtraPrueba(
función estática callOtherFunc()(
$func = "ClasePrueba::funcToCall" ;
función();
}
}
?>

hace 9 meses

Si bien la documentación sugiere que el uso de una constante es similar al uso de una variable, existe una excepción con respecto a las funciones de variables. No puede usar una constante como nombre de función para llamar a una función variable.

const DEBUGME="función";
func($s) ( echo $s. "\n"; )

DEPURAR("abc"); // resulta en un error de sintaxis

$llamar = DEPURAR;
$llamada("abc"); // hace el trabajo

Pero puede usar una constante como argumento para una función. Aquí hay una solución simple cuando necesita llamar a una función constante variable:

función dinámica ($qué, $con)
{
$que($con);
}
dinámico(DEPURAR, "abc");

Esto tiene sentido para mí para ocultar API y/o llamadas estáticas largas (complicadas).
¡Disfrutar!

hace 13 años

Si desea llamar a una función estática (PHP5) en un método variable:

Cree una matriz de dos entradas donde la entrada 0 es el nombre de la clase que se invocará ("self" y "parent" también funcionan) y la primera entrada es el nombre de la función. Básicamente, una variable de "devolución de llamada" es una cadena (el nombre de la función) o una matriz (0 => "nombre de clase", 1 => "nombre de función").

Luego, para llamar a esa función, puede usar call_user_func() o call_user_func_array(). Ejemplos:

clase A (

Protegido $a ;
protegido $c ;

Función __construir()(
$esto -> a = array("self", "a" );
$esto -> c = array("self", "c" );
}

Función estática a ($nombre y $valor) (
echo $nombre , " => " , $valor ++, "\n" ;
}

Función b ($nombre y $valor) (
call_user_func_array ($this -> a, array($name, & $value));
}

Función estática c ($str) (
echo $cadena, "\n";
}

Función d () (
call_user_func_array ($this -> c , func_get_args());
}

Función e () (
call_user_func ($this -> c, func_get_arg (0));
}

la clase B extiende A (

Función __construir()(
$esto -> a = array("padre", "a" );
$esto -> c = array("self", "c" );
}

función estática c()(
print_r(func_get_args());
}

Función d () (
call_user_func_array ($this -> c , func_get_args());
}

Función e () (
call_user_func ($this -> c , func_get_args());
}

$a =& nueva A ;
$b =& nueva B ;
$i = 0 ;

A :: a("índice", $i);
$a -> b("índice", $i);

$a -> c("cadena");
$a -> d("cadena");
$a -> e("cadena");

#etc.
?>

La nota: se activa la versión adaptativa del sitio, que se ajusta automáticamente al tamaño pequeño de su navegador y oculta algunos detalles del sitio para facilitar la lectura. ¡Feliz visualización!

Hola queridos lectores del blog sitio¡sobre! Aprendimos que hay una función en PHP, aprendimos cómo crear nuestras propias funciones, pasarles argumentos y llamarlas para su ejecución. Continuando con el tema de las funciones en PHP, es necesario enfatizar lo siguiente:

  • Dentro de la función, puede usar cualquier código PHP (bucles, condiciones, cualquier operación), incluidas otras funciones (tanto integradas como propias);
  • El nombre de la función debe comenzar con una letra latina o un guión bajo, seguido de cualquier número de letras latinas, números o guiones bajos;
  • Todas las funciones tienen un alcance global, lo que significa que se puede llamar a cualquier función en cualquier lugar, incluso si esa función está definida dentro de otra;
  • PHP no admite la sobrecarga de funciones y no hay forma de anular (cambiar, agregar) o eliminar una función creada;
  • No es necesario definir las funciones antes de utilizarlas. Es decir, si primero llama a la función, y solo entonces, descríbala a continuación en el código, esto no afectará el rendimiento y no causará errores.

Funciones condicionales

Podemos crear (definir, describir) una función, dependiendo de la condición. Por ejemplo:

// llamar a la función sayHi, se puede llamar en cualquier lugar /*la función sayGoodbye no se puede llamar aquí, ya que aún no hemos verificado la condición y no hemos entrado en la construcción if*/ if($aplicar)( function decir Adiós()( echo "¡Adiós a todos!
"; } } /*Ahora podemos llamar a decir Adiós*/
"; }

Resultado:

Y echa un vistazo a este ejemplo:

/*y esto es lo que pasa si llamas a sayGoodbye aquí*/ decir adiós(); if($aplicar)( function decir Adiós()( echo "¡Adiós a todos!
"; ) ) function decirHola()( echo "¡Hola a todos!
"; }

Resultado:

De hecho, por mucho que trabajo, nunca he visto esto en ningún lado, pero hay que tener en cuenta todas las posibilidades del lenguaje.

funciones anidadas

Una función anidada es una función declarada dentro de otra función. Ejemplo:

/*No puedes llamar a sayGoodbye aquí, ya que solo aparecerá después de llamar a la función sayHi*/ Di hola(); /*llamar a la función decirHola, se puede llamar en cualquier lugar*/ /*Ahora podemos llamar a decir Adiós*/ decir adiós(); function decirHola()( echo "¡Hola a todos!
"; function decir Adiós()( echo "¡Adiós a todos!
"; } }

De nuevo, en el primer recorrido, el intérprete de PHP se da cuenta de que ha encontrado la descripción de la función sayHi, pero no entra en su cuerpo, solo ve el nombre, y dado que el intérprete no entra en el cuerpo de sayHi, no tiene idea de lo que estamos definiendo dentro de una función más: sayGoodbye.

Luego, el código comienza a ejecutarse, llamamos a decirHola, el intérprete de PHP tiene que ir al cuerpo de la función decirHola para ejecutarlo, y allí accidentalmente encuentra una descripción de otra función: decirAdiós, después de lo cual puede llamar a decirAdiós en cualquier lugar, como tantas veces como quieras.

Pero vale la pena prestar atención a un punto muy sutil en la situación anterior: la función sayHi se convierte en una sola vez, porque si la llamamos nuevamente, PHP volverá a tropezar con la definición de la función sayGoodbye, y en PHP esto no se puede hacer. - no se pueden redefinir funciones. Escribí sobre esto y cómo tratarlo en un artículo anterior.

En PHP, las técnicas descritas anteriormente se usan muy raramente, se pueden ver con más frecuencia, por ejemplo, en JavaScript.

Alcance variable

PHP tiene exactamente dos ámbitos: global y local. Los ámbitos se organizan de manera diferente en cada lenguaje de programación. Por ejemplo, en C++, incluso los bucles tienen su propio alcance (local). En PHP, por cierto, este es el alcance global. Pero hoy estamos hablando de funciones.

Las funciones en PHP tienen su propio alcance interno (local), es decir, todas las variables dentro de la función son visibles solo dentro de esta función.

Entonces, una vez más: todo lo que está fuera de las funciones es el ámbito global, todo lo que está dentro de las funciones es el ámbito local. Ejemplo:

Estimados expertos, atención, pregunta! ¿Cuál será la salida de la última instrucción? echo $nombre; ?

Como viste por ti mismo, teníamos 2 variables $nombre, uno dentro de la función (alcance local), el otro solo en código (alcance global), la última asignación a una variable $nombre Fue $nombre = "Rud Serguéi"; Pero como estaba dentro de la función, ahí se quedó. En el ámbito global, la última asignación fue $nombre = "Andrés"; lo que realmente vemos como resultado.

Es decir, dos variables idénticas, pero en diferentes ámbitos, no se cruzan de ninguna manera y no se afectan entre sí.

Permítanme ilustrar los alcances en la figura:

Durante el primer recorrido, el intérprete roza el alcance global, recuerda qué variables y funciones son, pero no ejecuta el código.

Acceso a variables globales desde el ámbito local

Pero, ¿qué sucede si aún necesitamos acceder a la misma variable $name desde el alcance global de la función, y no solo acceder a ella, sino cambiarla? Hay 3 opciones principales para esto. El primero es el uso de la palabra clave global:

"; global $nombre; /*a partir de ahora nos referimos a la variable global $nombre*/$nombre = "Rud Serguéi"; ) $nombre = "Andrés"; decir hola ($ nombre); echo $nombre; // ?

Resultado:

Pero este método tiene un inconveniente, ya que recurrimos a la variable global $nombre hemos perdido (sobrescrito) una variable local $nombre.

segunda forma es usar Matriz superglobal de PHP. En esta matriz, el mismo PHP coloca automáticamente todas las variables que hemos creado en el ámbito global. Ejemplo:

$nombre = "Andrés"; //Igual que$GLOBALS["nombre"] = "Andrés";

Por lo tanto:

"; $GLOBALS["name"] = "Rud Sergey"; ) $name = "Andrey"; sayHi($name); echo $name; // ?

El resultado es el mismo que cuando se usa la palabra clave global:

Solo que esta vez no sobrescribimos la variable local, es decir, la variable $nombre dentro de la función sigue siendo la misma y es igual a "Andréi", pero no "Rud Serguéi".

Pasar argumentos por referencia

tercera vía es la transmisión de la dirección ( Enlaces) variable, no su valor. Las referencias en PHP no tienen mucho éxito, a diferencia de otros lenguajes de programación. Sin embargo, le diré la única forma correcta de pasar un argumento por referencia a una función, que normalmente es compatible con PHP 5.3 y superior. Hay otras formas de trabajar con enlaces, pero funcionaron en PHP 5.2 y versiones anteriores, como resultado, los propios desarrolladores de PHP decidieron abandonarlos, por lo que no hablaremos de ellos.

Entonces, la forma CORRECTA de pasar un argumento por referencia en PHP 5.3 y superior es la siguiente:

Función decirHola(& $nombre)(

Agregamos un ícono de ampersand (&) en la descripción de la función misma; este ícono significa que no aceptamos el valor de una variable, sino una referencia (dirección) a este valor en la memoria. Las referencias en PHP le permiten crear dos variables que apunten al mismo valor. Esto significa que cuando una de estas variables cambia, ambas cambian, ya que se refieren al mismo valor en memoria.

Y como resultado tenemos:

//no aceptamos un valor, sino una referencia a un valor echo "Hola, ".$nombre."!
"; $nombre = "Rud Sergey"; ) $nombre = "Andrey"; sayHola($nombre); echo $nombre; // ?

Resultado:

Variables estáticas

Imagina la siguiente situación: necesitamos contar cuántas veces nos saludamos en total. Esto es lo que estamos tratando de hacer:

"; $c++; // incrementa el contador en 1


Resultado:

Variable $c no recuerda su valor, se crea de nuevo cada vez. Necesitamos asegurarnos de que nuestra variable local $c recordaron su valor después de ejecutar la función, para ello utilizan la palabra clave estático:

// contador, hecho estático echo "Hola, ".$nombre."!
"; $c++; // incrementa el contador en 1 echo "Hola total" . $ c . " una vez.


"; ) saluda("Rud Sergey"); saluda("Andrey"); saluda("Dmitry");

Resultado:

Valores devueltos

Las funciones tienen algo tan conveniente como devolver valores. Aquí es cuando la función, en lugar de mostrar algo en pantalla, pone todo en una variable y nos da esa variable. Y ya estamos decidiendo qué hacer con él. Por ejemplo, toma esta función, eleva un número al cuadrado:

Resultado:

Hagámoslo para que en lugar de mostrarlo en la pantalla, devuelva el resultado de la ejecución. La palabra clave de retorno se utiliza para esto:

Resultado:

Ahora podemos usar esto de varias maneras:

//imprime el resultado eco "
"; $num = obtenerCuadrado(5); echo $num;

Resultado:

Llamo su atención sobre el hecho de que la palabra clave devolver no solo devuelve un valor, sino que interrumpe completamente la función, es decir, todo el código que está debajo de la palabra clave devolver nunca se cumplirá. En otras palabras, el retorno de funciones también funciona como romper para ciclos:

echo "PHP nunca me alcanzará:(";) echo obtenerCuadrado(5); //imprime el resultado eco "
"; $num = obtenerCuadrado(5); // asigna el resultado a una variable echo $num; // mostramos la variable en la pantalla

Resultado:

Es decir devolver es también una salida de la función. Se puede usar sin un valor de retorno, solo por el bien de una salida.

función recursiva

Una función recursiva es una función que se llama a sí misma. La recursividad no se usa con frecuencia y se considera una operación que consume muchos recursos (lenta). Pero sucede que el uso de la recursividad es la opción más obvia y sencilla. Ejemplo:

"; si ($ numero< 20){ // para que la recursividad no se haga infinita contar por favor(++$número); // la función cuentaPor favor se llama a sí misma) cuenta por favor (1);

Resultado:

Si sabe cómo prescindir de la recursividad, entonces es mejor que lo haga.

Escritura fuerte en PHP (calificación de tipo)

PHP ha dado pequeños pasos hacia la tipificación fuerte para que podamos especificar previamente qué tipo debe tomar una función (esto se llama sugerencia de tipo):

Resultado:

Error fatal detectable: el argumento 1 pasado a countPlease() debe ser una matriz, dado un número entero, invocado en /home/index.php en la línea 7 y definido en /home/index.php en la línea 3

El error nos dice que la función espera recibir una matriz, pero en su lugar le pasamos un número. Desafortunadamente, por el momento, solo podemos especificar el tipo para (matriz), y desde PHP 5.4, se ha agregado esta opción como invocable:

invocable comprueba si el valor pasado se puede llamar como una función. Invocable puede ser un nombre de función proporcionado por una variable de cadena o un objeto y el nombre de un método que se va a llamar. Pero hablaremos de objetos y métodos más adelante (esta es la sección de programación orientada a objetos), y ya estás familiarizado con las funciones. No puedo mostraros el resultado del trabajo, ya que actualmente tengo PHP 5.3, pero sería:

Llamada a la función getEcho

Uso de argumentos de longitud variable

Y, por último, otro matiz muy poco utilizado. Imagina la situación, le pasamos argumentos a la función, aunque no los describimos en la función, por ejemplo:

Resultado:

Como puede ver, no hay errores, pero nuestros argumentos pasados ​​tampoco se usan en ninguna parte. Pero esto no significa que se hayan ido, todavía se pasan a la función y podemos usarlos, hay funciones PHP integradas para esto:

func_num_args()- Devuelve el número de argumentos pasados ​​a la función.
func_get_arg(número de secuencia)- Devuelve un elemento de la lista de argumentos
func_get_args()- Devuelve una matriz que contiene los argumentos de la función.

"; echo func_get_arg(0) ; ) $edad = 22; getEcho("Rud Sergey", $edad);

Resultado:

Conclusión

El artículo de hoy es el último sobre el tema de las funciones en PHP. Ahora puede estar seguro de que sus conocimientos sobre este tema son completos y puede utilizar las funciones de forma segura para sus necesidades.

Si alguien desea ponerse manos a la obra, pero no tiene idea de cómo hacerlo, la mejor manera sería escribir funciones PHP listas para usar (incorporadas), por ejemplo, puede escribir su propia función count() o cualquier otra. otro.

¡Gracias a todos por su atención y hasta pronto! Si algo no está claro, ¡no dude en hacer sus preguntas en los comentarios!

Finalmente, llegamos al tema. creando funciones en PHP. Este tema es extremadamente importante y, tal vez, se crean funciones en PHP A menudo. Y, por supuesto, hay que crearlos. Les recuerdo que una función es un bloque de código, que es una determinada plantilla, cuya acción depende de los parámetros de entrada. Ahora pasemos a crear y usar funciones en PHP.

Escribamos un ejemplo de una función elemental que simplemente imprima " Hola Mundo":

función imprimirHola() (
echo "Hola Mundo";
}
imprimirHola();
?>

En este ejemplo, hemos creado una función llamada " imprimirHola" sin parámetros (no hay nada dentro de los paréntesis), luego escribimos el código de la función entre corchetes. Es decir, en este caso, generamos una cadena. Lo llamamos fuera de la función. Como puede ver, todo es muy simple Pero el costo de esta función es cero, aunque solo sea porque siempre funciona de la misma manera.Por supuesto, esto a veces es necesario, por lo que no debe pensar que un ejemplo de función de este tipo generalmente no tiene sentido.Sin embargo, más a menudo, la función aún requiere un parámetro, y vamos a crear una función con usted, a la que le pasaremos una cadena y luego generaremos esta línea:

function imprimirHola($str) (
echo $cadena;
}
imprimirHola("Hola Mundo!!!");
?>

Aquí hemos creado una función, pero con un parámetro. Y luego mostramos el valor de este parámetro a través de eco. Fuera de funcionamiento imprimirHola() lo llamamos y le pasamos la cadena " ¡¡¡Hola Mundo!!!". Como puede ver, todo es simple aquí.

Y lo último que quiero decir es sobre los parámetros predeterminados que permiten crear funciones con un número variable de parámetros. Propongo resolver el siguiente problema: crear una función que tomará una matriz como primer parámetro y una variable booleana como segundo parámetro ( verdadero o falso), cuyo valor por defecto será falso:

función imprimirArray ($arr, $bool = false) (
$cadena = "";
para ($i = 0; $i< count($arr); $i++)
$cadena .= "Elemento $i = $matriz[$i]
";
si ($bool) devuelve $str;
echo $cadena;
}
$a = arreglo(15, 12, 13, 14);
imprimirArray($a);
$cadena = imprimirArray($a, verdadero);
echo $cadena;
?>

Aquí el significado es el siguiente: la tarea de la función es formar una cadena a partir de la matriz, es decir, simplemente convertir la matriz en un tipo de cadena. En este ejemplo, lo más interesante es el parámetro bool, que tiene un valor predeterminado. Si ella falso(como por defecto, es decir, si no se especificó ningún otro valor), la línea se imprime inmediatamente en el navegador y, si se pasa verdadero(como en la segunda llamada de función), luego se devuelve la cadena ( devolver $cadena) función. Aquí hay un ejemplo simple para crear funciones con parámetros predeterminados.