Помогите разобраться с условием для if на php
Доброго времени суток форумчани. Столкнулся с проблемой, помогите пожалуйста решить.
Вот код:
$action = null; //Тип данных по умолчанию
$type = null; //Тип данных по умолчанию
$variation = null; //Тип данных по умолчанию
$action = '$action'; //Тип данных: string, int или null
$type = '$type'; //Тип данных: string, int или null
$variation = 0; //Тип данных: string, int или null
if ($action)
$action = "action:" . $action;
if ($type and $action)
$type = "|type:" . $type;
elseif ($type)
$type = "type:" . $type;
if ($variation and ($type or $action))
$variation = "|variation:" . $variation;
elseif ($variation)
$variation = "variation:" . $variation;
Вывод: action:$action|type:$type0
Тут теряется слово |variation
. Но если $variation
равен null
или любому значению отличительному от 0, то все Ок.
Пробовал в такой вариации:
if ($variation and ($type or $action))
$variation = "|variation:" . $variation;
elseif ($variation)
$variation = "variation:" . $variation;
elseif ($variation == 0)
if (($type or $action))
$variation = "|variation:" . $variation;
else
$variation = "variation:" . $variation;
Тут же другая проблема, если $action
и $type
не равны null
, а $variation
равен ему то: action:$action|type:$type|variation:
. Отображается |variation:
, но не должен.
Помогите решить проблему. Какое условие необходимо поставить что бы:
- Что бы указании всех трёх переменных было так
action:$action|type:$type|variation:$variation
(даже если одно из них принимает значения 0) - При отсутствии одной из трёх сохранялась концепция, например:
action:$action|variation:$variation
,action:$action
и т.д.
UPD. Проблема именно с логическими выражениями. У меня не получается правильно задать последнее из-за 0
, if
воспринимает его как bool(false) при выполнении. Но если я меняю условие в if, то он перестает реагировать на другой текст или ведет себя не корректно при отсутствии какого-то значения в $variation
.
UPD2. Почему $value_2
не подходит по условию? Была мысль что переменная принимает тип boolean
, но при выводе через var_dump
его тип int
. Вопрос, почему так?
if ($value_1)
var_dump($value_1); //string(11) "Hello World"
if ($value_2)
var_dump($value_2); //Не подходит по условию...
else
var_dump($value_2); //int(0)
if ($value_3)
var_dump($value_3); //int(1)
if ($value_4)
var_dump($value_4); //int(2)