[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Гостевая книга. Тернарный оператор!
MOT
Гостевая книга. Тернарный оператор!

Синтаксист:

$variables = empty($var)?'Переменная $var пустая':'Переменная $var полная';

пример:

$text1 = !empty($_POST['text1'])?$_POST['text1']:null; // здесь все понятно!

А вот здесь не очень!!! Какое условие (т.е. empty($var)?)

$files = count($files)?$files:array('1'); !!

что значит выражение count($files)? и какой результат возращает вся строчка?



Спустя 38 минут, 6 секунд (5.06.2010 - 18:25) Rand написал(а):
count считает количество элементов в массиве $files. Если массив не пустой, он присваивается сам себе, иначе первому элементу присваивается значение 1.

Спустя 9 часов, 48 минут, 12 секунд (6.06.2010 - 04:13) MOT написал(а):
а как же условие?

может тогда стоило написать так:

$files = !(count($files)==0)?$files:array('1');

здесь по крайней мере даже без коментария видно, что к чему....!!!

Спустя 3 часа, 17 минут, 53 секунды (6.06.2010 - 07:31) AmberLEX написал(а):
Если count($files) вернуло 0 - это и так ложное условие и выполняется соответствующее действие тернарного оператора.
Ну и количество действий: сначала подсчет (count), потом сравниваем с нулем, потом отрицаем. Итого: 3 действия вместо одного, зачем?

Спустя 53 минуты, 21 секунда (6.06.2010 - 08:24) Rand написал(а):
Для меня вообще не понятно, почему не
if(empty($files)) $files=array('1');

Спустя 1 час, 53 минуты, 38 секунд (6.06.2010 - 10:18) twin написал(а):
Можно и так.

Спустя 1 день, 40 минут, 21 секунда (7.06.2010 - 10:58) AmberLEX написал(а):
Да, тернарный тут явно лишний)

Спустя 5 месяцев, 28 дней, 12 часов, 57 минут (6.12.2010 - 00:55) jumper_dev написал(а):
Всем доброй ночи.
Хотел бы узнать что быстрей работает конструкция "if else" или тернарный оператор.
Приведу примеры из урока гостевой книги.
Пример if else:
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
// инициализация
$auth = !empty($_POST['auth']) ? $_POST['auth'] : null;
$text = !empty($_POST['text']) ? $_POST['text'] : null;
$yes = !empty($_POST['yes']) ? true : false;
?>
<form action="" method="POST">
<
label><span style="color: red;">*</span>Автор: </label>
<
input name="auth" type="text" value="<?=htmlspecialchars($auth); ?>"/><br />
<
label><span style="color: red;">*</span>Текст сообщения: </label><br />
<
textarea name="text" cols="50" rows="10"><?=htmlspecialchars($text); ?></textarea><br />
<
input name="yes" type="submit" />
</
form>
<
p style="font-size: 12px;">Поля отмечены звездочкой<span style="color: red;">*</span> обязательны для заполнения.</p>
<?php
if (!empty($yes)){
if(!$auth || !$text)
echo 'Не все поля заполнены';
else
echo htmlspecialchars($auth) . '<br />' . nl2br(htmlspecialchars($text));
}else{
echo 'Напишите что-нибудь!!!';
}
?>

Пример c тернарными операторами
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
// инициализация
$auth = !empty($_POST['auth']) ? $_POST['auth'] : null;
$text = !empty($_POST['text']) ? $_POST['text'] : null;
$yes = !empty($_POST['yes']) ? true : false;
?>
<form action="" method="POST">
<
label><span style="color: red;">*</span>Автор: </label>
<
input name="auth" type="text" value="<?=htmlspecialchars($auth); ?>"/><br />
<
label><span style="color: red;">*</span>Текст сообщения: </label><br />
<
textarea name="text" cols="50" rows="10"><?=htmlspecialchars($text); ?></textarea><br />
<
input name="yes" type="submit" />
</
form>
<
p style="font-size: 12px;">Поля отмечены звездочкой<span style="color: red;">*</span> обязательны для заполнения.</p>
<?php
$a = htmlspecialchars($auth) . '<br />' . nl2br(htmlspecialchars($text));
//замена if else на тернарный оператор
$printers = !empty($yes) ? (!$auth || !$text) ? 'Не все поля заполнены' : $a : 'Напишите что-нибудь!!!';
echo $printers;
?>

Или разницы в скорости выполнения вообще не какой нету?
Спасибо

Спустя 14 минут, 2 секунды (6.12.2010 - 01:09) inpost написал(а):
microtime(true) - запусти, посчитай разницу времени после 1000 запросов так и так, узнаешь разницу

Спустя 5 часов, 22 минуты, 54 секунды (6.12.2010 - 06:32) twin написал(а):
Можно вообще так
//замена if else на тернарный оператор
echo  !empty($yes) ? (!$auth || !$text) ? 'Не все поля заполнены' :
      htmlspecialchars($auth) . '<br />' . nl2br(htmlspecialchars($text)) :
      'Напишите что-нибудь!!!';
только зачем? Экономии тут почти никакой, а читабельность сильно пострадвла.
Быстрый ответ:

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