Функции

Содержание

Функции, определяемые пользователем

Приведем пример синтаксиса, используемого для описания функций:

Пример #1 Псевдокод для демонстрации использования функций

<?php
function foo($arg_1$arg_2/* ..., */ $arg_n)
{
    echo 
"Example function.\n";
    return 
$retval;
}
?>

Внутри функции можно использовать любой корректный PHP-код, в том числе другие функции и даже объявления классов.

В PHP 3 функции должны были быть определены прежде, чем они будут использованы. Начиная с PHP 4 такого ограничения нет, исключая тот случай, когда функции определяются условно, как это показано в двух последующих примерах.

В случае, когда функция определяется в зависимости от какого-либо условия, например, как это показано в двух приведенных ниже примерах, обработка описания функции должна предшествовать ее вызову.

Пример #2 Функции, зависящие от условий

<?php

$makefoo 
true;

/* Мы не можем вызвать функцию foo() в этом месте,
   поскольку она еще не определена, но мы можем 
   обратиться к bar() */

bar();

if (
$makefoo) {
  function 
foo()
  {
    echo 
"I don't exist until program execution reaches me.\n";
  }
}

/* Теперь мы благополучно можем вызывать foo(),
   поскольку $makefoo была интерпретирована как true */

if ($makefoofoo();

function 
bar() 
{
  echo 
"I exist immediately upon program start.\n";
}

?>

Пример #3 Вложенные функции

<?php
function foo() 
{
  function 
bar() 
  {
    echo 
"I don't exist until foo() is called.\n";
  }
}

/* Мы пока не можем обратиться к bar(),
   поскольку она еще не определена. */

foo();

/* Теперь мы можем вызвать функцию bar(),
   обработка foo() сделала ее доступной. */

bar();

?>

PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.

Замечание: Имена функций регистронезависимы, тем не менее, более предпочтительно вызывать функции так, как они были объявлены.

PHP 3 не поддерживает переменное количество аргументов функции, хотя поддержка значений по умолчанию для аргументов присутствует (смотрите раздел Значения аргументов по умолчанию). Начиная с 4-й версии PHP поддерживает и то, и другое: смотрите раздел Списки аргументов переменной длины и описания функций func_num_args(), func_get_arg(), и func_get_args() для более детальной информации.

Коментарии

<?php
// Inicializamos el array para almacenar todas las reservas
$reservasCompletas = array();

// Verificamos si el formulario se ha enviado
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   
// Recuperamos los datos del formulario
   
$hab $_POST["habitacion"];
   
$nochesReservadas = (int)$_POST["noches"];
   
$fechaReserva $_POST["fecha"];

   
// Crear un array de reserva individual
   
$reserva = [
       
'habitacion' => $hab,
       
'noches' => $nochesReservadas,
       
'fecha' => $fechaReserva,
       
    ];

   
// Si ya hay reservas previas, las recuperamos y reconstruimos los arrays
   
if (!empty($_POST['reservas_previas'])) {
       
$reservasPrevias explode(","$_POST['reservas_previas']);
        foreach (
$reservasPrevias as $reservaStr) {
           
// Convertimos cada reserva de cadena a array asociativo
           
$reservaArray explode("|"$reservaStr);
           
$reservasCompletas[] = [
               
'habitacion' => $reservaArray[0],
               
'noches' => $reservaArray[1],
               
'fecha' => $reservaArray[2],
               
            ];
        }
    }

   
// Añadimos la nueva reserva
   
$reservasCompletas[] = $reserva;
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reserva de Hotel</title>
</head>
<body>
    <h1>Reserva de Habitación</h1>
    <form action="" method="post">
        <!-- Menú desplegable para seleccionar tipo de habitación -->
        <label for="habitacion">Tipo de habitación: </label>
        <select name="habitacion" id="habitacion" required>
            <option value="Sencilla">Sencilla</option>
            <option value="Doble">Doble</option>
            <option value="Suite">Suite</option>
        </select>

        <!-- Campo para la cantidad de noches -->
        <label for="noches">Número de noches: </label>
        <input type="number" id="noches" name="noches" min="1" step="1" value="1" required>

        <!-- Campo para la fecha de llegada -->
        <label for="fecha">Fecha de llegada: </label>
        <input type="date" id="fecha" name="fecha" required>

        <!-- Campo oculto para almacenar las reservas previas, usamos implode para convertir el array en cadena -->
        <input type="hidden" name="reservas_previas" value='<?php 
           
// Convertimos las reservas en cadenas usando | para separar valores y , para separar reservas
           
$reservasStr array_map(function($reserva) {
                return 
implode("|"$reserva);
            }, 
$reservasCompletas);
            echo 
implode(","$reservasStr);
       
?>'>

        <!-- Botón para enviar el formulario -->
        <button type="submit">Agregar reserva</button>
    </form>

    <h2>Resumen de la reserva</h2>

    <?php if (!empty($reservasCompletas)): ?>
        <?php foreach ($reservasCompletas as $reserva): ?>
            <p>
                Habitación: <?= $reserva['habitacion'?> <br>
                Noches: <?= $reserva['noches'?> <br>
                Fecha de llegada: <?= $reserva['fecha'?> <br>
               
            </p>
        <?php endforeach; ?>
    <?php else: ?>
        <p>No hay reservas realizadas aún.</p>
    <?php endif; ?>
</body>
</html>
2024-10-18 11:09:01
http://php5.kiev.ua/manual/ru/language.functions.html

    Поддержать сайт на родительском проекте КГБ