условный — это хороший способ написания длинных условий в PHP?

Я должен оценить очень длинное условие в PHP, поэтому, чтобы избежать ошибок и попытаться написать более читаемый код, я сделал следующее:

 //this returns 1 when true, and nothing when false, although expected TRUE or FALSE

$isNameValid=strlen($dataDecoded['nombre'])>=3;

$isDescriptionValid=(strlen($dataDecoded['descripcion'])>=10) &&  strlen($dataDecoded['descripcion'])<=300;

$isPriceValid=$dataDecoded['precio'] >0;

$isImageValid=(($dataDecoded['imagen'] != "") && ($dataDecoded['imagen'] != NULL) );

И теперь я могу сделать следующее:

 if($isNameValid==1 && $isDescriptionValid==1 && $isPriceValid==1 && $isImageValid==1)
{
echo "ok";
}
else{
echo "no";
}

Кажется, это работает нормально, но, возможно, это странный способ делать вещи. Я хотел избежать следующего, которое я нахожу более запутанным и легко сделать ошибку

if(strlen($dataDecoded['nombre'])>=3 && ... && ...)

Есть ли лучший способ сделать это? Это неправильно, что я сделал? Спасибо

0

Решение

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

function valid($data) {
return validName($data['nombre']) &&
validDescription($data['descripcion']) &&
validPrice($data['precio']) &&
validImage($data['imagen']);
}

function validName($name) {
return strlen($name) >= 3;
}

function validDescription($desc) {
return strlen($desc) >= 10 && strlen($desc) <= 300;
}

function validPrice($price) {
return $price > 0;
}

function validImage($image) {
return $image !== "" && $image != NULL;
}

$dataDecoded = [
"nombre" => "foo",
"descripcion" => "foo bar foo bar",
"precio" => 15,
"imagen" => "foo.png"];

// now your main code is beautiful:
echo (valid($dataDecoded) ? "ok" : "no") . "\n";
3

Другие решения

Да, это приемлемо. Тем не менее, ваши переменные там все логические, так что вам даже не нужно == 1.

if($isNameValid && $isDescriptionValid && $isPriceValid && $isImageValid)
3

Это действительно зависит от того, как вы хотите справиться с этим.
Является переключатель вариант или жизнеспособный?
Является троичный, если красивее или удобнее?

Из того, что я вижу, я предполагаю, что у вас есть цель проверки и входящие операции в зависимости от проверки. Почему бы не создать функцию или класс, который обрабатывает ваш ввод и проверяет правильность? И там вы можете получить весь грязный код, какой захотите. На вашем логическом коде вам просто нужно сделать (например, класса)

$someClass = new SomeClass();
$someClass->validate($fields);
if ($someClass->isValidated()) ...

Таким образом, вы на самом деле следовали бы некоторым стандартам, тогда как его целью было бы работать как средство проверки (все? Зависит от ваших потребностей) ваших данных

Например, тройной ифс

$isNameValid = count($dataDecoded['nombre'])>=3 ? true : false;
$isDescriptionValid = count($dataDecoded['descripcion']) >= 10 && count($dataDecoded['descripcion']) <= 300 ? true : false;
$isPriceValid = count($dataDecoded['precio']) > 0 ? true : false;
$isImageValid = empty($dataDecoded['imagen']) === false ? true : false;


if ($isNameValid && $isDescriptionValid && $isPriceValid && $isImageValid) ...
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector