[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Тернарные выражения
Страницы: 1, 2
McLotos
Вот возник такой вопрос, можно ли использовать тернарные выражения не только для получения результата, но и для выполнения каких-то действий? Ну например
конструкция
if($a>$b)
{echo $a.' больше '.$b;}
else
{echo "$b больше $a";}

Кроме банального вывода этих сообщений мы можем в результат условий поставить огромное количество кода, который что-то будет делать, вызов функций, произведение каких-то расчетов и т.д.
А вот я тут почитал про тернарные выражения, и судя по оф.примерам а так же по наиболее частым вариантам использования, они нужны только для того чтобы получить в переменную (или вывести на экран) результат сравнения.
Есть ли какая-то возможность в зависимости от результата выполнять какие-либо действия?
Вопрос скорее теоретический, чем практический, но просто очень интересно.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Bolik
echo ($a>$b) ? "$a больше $b" : "$b больше $a";

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

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
sergeiss
Цитата (SergeySA @ 29.06.2014 - 18:24)
Это печально. Я просто думал что их можно использовать для чего-то кроме вывода на экран

Что ж тут печального? :) И кстати. Их можно (и нужно) использовать не только для вывода на экран, но и, например, для назначения переменных с в одновременной проверкой исходных данных.
Например:
$a = isset( $_POST['val'] ) ? intval( $_POST['val'] ) : -1; // -1 == default


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
brevis
function showLoginForm() {
echo 'login form';
// или header('Location: /login/');
}

$isLogged = true;
// ...
$isLogged ? print('You are logged in') : showLoginForm();


_____________
Чатик в телеге
Bolik
минус тернарных выражений в том, что можно легко запутаться:


$days = ($month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year %400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31));


а так использую их часто, если условия простые. код намного легче читать.
brevis
Цитата (Bolik @ 29.06.2014 - 19:05)
минус тернарных выражений в том, что можно легко запутаться

Кроме того, еще нужно понимать принцип работы.
Все знают, что выведется в результате работы следующего куска?
$arg = 'T';
$vehicle = $arg == 'B' ? 'bus' :
$arg == 'A' ? 'airplane' :
$arg == 'T' ? 'train' :
$arg == 'C' ? 'car' :
$arg == 'H' ? 'horse' :
'feet';
echo $vehicle;


_____________
Чатик в телеге
sergeiss
brevis, вот чтобы не гадать над такими загадками, надо скобки ставить. Изначально за правило взять. Тогда не будет таких вот "ребусов".

PS. Честно замечу, что я не угадал ответ smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
brevis
sergeiss, да это я скобки специально убрал. Наверное зря, т.к. в оригинале пример был со скобками (но они не правильно расставлены) и "эффект" от этого только усиливается:
$arg = 'T';
$vehicle = ( ( $arg == 'B' ) ? 'bus' :
(
$arg == 'A' ) ? 'airplane' :
(
$arg == 'T' ) ? 'train' :
(
$arg == 'C' ) ? 'car' :
(
$arg == 'H' ) ? 'horse' :
'feet' );
echo $vehicle;



_____________
Чатик в телеге
sergeiss
brevis, как ты показываешь скобки, они что есть, что их нет. Я имел ввиду, что изначально в подобной конструкции подразумевается (наверное) нечто такое:

$vehicle = $arg == 'B' ? 'bus' :
(
$arg == 'A' ? 'airplane' :
(
$arg == 'T' ? 'train' :
(
$arg == 'C' ? 'car' :
(
$arg == 'H' ? 'horse' :
'feet'))));

но вовсе не то, что получается на самом деле при отсутствии скобок.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
э... вот вы озадачили =))))
теперь я понимаю ещё меньше =))))

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Вот например есть такой код
if(empty($_GET['p']))
{require 'index.htm';}
else
{
$url = explode('/',$_GET['p']);
if(empty($url[1]))
{require $url[0].'.htm';}
else
{require $url[1].'-'.$url[0].'.htm';}
}

Не знаю почему именно она, просто тут вложенность условий.
эту конструкцию реально реализовать таким выражением?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
dron4ik
Цитата (SergeySA @ 29.06.2014 - 14:24)
т.е. тернарные выражения уступают по функционалу условиям. Это печально. Я просто думал что их можно использовать для чего-то кроме вывода на экран

Прошу прощения, я потерялся)))

Не помню как там по грамотному, но можно все, а если есть сомнения, но в блок их засунуть тоже можно))) С того момента как роздуплился как пользоваться, использую постоянно, за что уже пару раз получал по шее)))

_____________
Ex3m.com.ua — Активный образ жизни
sergeiss
Цитата (SergeySA @ 30.06.2014 - 00:03)
if(empty($_GET['p']))
{require 'index.htm';}
else
{
  $url = explode('/',$_GET['p']);
  if(empty($url[1]))
    {require $url[0].'.htm';}
  else
    {require $url[1].'-'.$url[0].'.htm';}
}

Не знаю почему именно она, просто тут вложенность условий.
эту конструкцию реально реализовать таким выражением?

В 2 строки можно без проблем:

$url = !empty( $_GET['p'] ) ? explode( '/', $_GET['p'] ) : array();
require empty( $_GET['p'] ) ? 'index.htm' : (empty($url[1]) ? ($url[0]. '.htm') : ($url[1].'-'.$url[0].'.htm') );


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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
Цитата (sergeiss)
Особенно когда через некоторое время анализируешь свой же код.

да-да я не раз здесь говорил о том что с этим обычно у многих проблема, когда через пару-тройку лет открываешь старый код, и ... пишешь всё сначала потому-что ничего не понимаешь =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.