На моем сайте троичные операторы используются повсеместно, и я пытаюсь обновить их, чтобы объединить. Это только один пример, и я надеялся получить советы / предложения по переходу. Дело в том, что coalesce отправляет первое найденное значение / строку, и поэтому я не уверен, возможно ли это с coalesce?
echo (
($member_logged_in == 1)
? '<a href="profile.php">My Profile</a>'
: '<a href="login.php">Login</a>'
);
Можно ли превратить это в объединение или я должен придерживаться троичного оператора?
Пока вы собираетесь использовать целые или логические значения для управления содержимым шаблона, вы будете застревать с помощью логических операторов.
Единственные две альтернативы — использовать троичный оператор по умолчанию или написать вспомогательную функцию.
// replace boolean with a string or null
$member_logged_in = '<a href="profile.php">My Profile</a>';
//.....
echo $member_logged_in ?: '<a href="login.php">Login</a>';
Используйте логическую функцию
function __($a,$b,$c) { return $a ? $b : $c; }
//........
echo __($member_logged_in, '<a href="profile.php">My Profile</a>', '<a href="login.php">Login</a>');
В идеале не должно быть никаких условий в ваших шаблонах. Вы можете ввести переменную с именем $menu
в нем указываются ссылки для отображения, и шаблону должно быть все равно, вошел ли пользователь в систему или нет.
??
возвращает первый операнд, если он существует и не равен нулю. Вы хотите вывести строку, если $member_logged_in
равно 1
,
Вы не должны использовать ??
оператор в этом случае.