Передача даты в функцию в php
я делаю php-скрипт, который через дату оплаты дает мне следующий срок с учетом состояния, то есть, является ли этот платеж или нет. Что-то вроде этого:
$list = $conn->query("SELECT * FROM cuenta WHERE useride = '".$code."' AND estado = 0");
$fila = $list->fetch();
$mes = '+30 day';
$sem = '+180 day';
$anu = '+365 day';
$periodo = $fila['periodo'];
if ($periodo == 'mensual') {
$fecha = $fila['fechapago'];
$nfecha = strtotime ($mes , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
echo $nfecha;
} elseif ($periodo == 'semestral') {
$fecha = $fila['fechapago'];
$nfecha = strtotime ($sem , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
echo $nfecha;
} else {
$fecha = $fila['fechapago'];
$nfecha = strtotime ($anu , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
echo $nfecha;
}
Моя идея состоит в том, чтобы передать его функции, и правда, функции не будут хорошо использоваться или, скорее, не будут создаваться. Я не ожидаю, что они это сделают, но если они немного ориентируют меня. Спасибо!
1 answers
Вообще говоря, функции должны получать в параметре все те значения, с которыми они будут работать... или никаких параметров, если все необходимое находится в области функции. И, если необходимо, они вернутся ожидаемое значение.
В этом случае мы предполагаем, что по крайней мере значение $fila
получено вне функции. Затем мы передаем его в параметр, чтобы функция работала с этой информацией. Обратите внимание, что я создал значение $calculo
, которое будет меняться в зависимости от значение $periodo
и в конце if
мы делаем вычисление с соответствующим значением. Таким образом, мы экономим несколько строк кода, выигрывая в простоте и ясности в программе ... наконец, он вернет (return
), конечные данные.
Например:
/*
*Vamos a suponer que la consulta se hace desde otra parte
*Aunque puedes hacer esto dentro de la función,
*todo dependerá de tu conexto
*/
$list = $conn->query("SELECT * FROM cuenta WHERE useride = '".$code."' AND estado = 0");
$fila = $list->fetch();
/*
*Ahora le pasas $fila a la función
*como es una función que tiene un return, puedes asignar el resultado
*de la llamada de la función a una variable
*/
$fechaVencimiento=getVencimiento($fila);
echo $fechaVencimiento;
/*
*Esta es la función y el parámetro que recibe
*/
function getVencimiento($fila){
$periodo = $fila['periodo'];
if ($periodo == 'mensual') {
$calculo='+30 day';
} elseif ($periodo == 'semestral') {
$calculo = '+180 day';
} else {
$calculo = '+365 day';
}
$fecha = $fila['fechapago'];
$nfecha = strtotime ($calculo , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
/*
*Como verás, he quitado todos los echo
*porque interesa que la función retorne el valor sólo al final
*/
return $nfecha;
}
Более элегантная форма
В некоторых случаях код становится более ясным и элегантным, если мы используем блок switch
. Чехол, который вы выставляете, идеально подходит для его использования. Функция останется так:
function getVencimiento($fila){
$periodo = $fila['periodo'];
switch ($periodo) {
case 'mensual':
$calculo='+30 day';
break;
case 'semestral':
$calculo = '+180 day';
break;
default:
$calculo = '+365 day';
}
$fecha = $fila['fechapago'];
$nfecha = strtotime ($calculo , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
return $nfecha;
}
ВАЖНОЕ ПРИМЕЧАНИЕ ПО БЕЗОПАСНОСТИ:
Запрос
SELECT * FROM cuenta WHERE useride = '".$code."' AND estado = 0
уязвим для SQL-инъекций. Чтобы исправить это серьезное проблема безопасности, вы должны реализовать использование запросов подготовленные. Для получения дополнительной информации вы можете прочитать: Как избежать SQL-инъекций в PHP?