|
|
|
| День добрый.
Подскажите, если я поставлю условия:
if()
{
...
}
elseif()
{
...
}
| то, если уже будет выполняться первое, второе всё равно будет тоже проверяться или скрипт остановится и просто выдаст результат для первого?
Я спрашиваю, чтобы понять, лучше будет делать так:
if($per_0==true)
{
$error=true;
}
elseif($per_1==true)
{
$error=true;
}
| или так:
if($per_0==true)
{
$error=true;
}
if($per_1==true)
{
$error=true;
}
| Что будет быстрее? | |
|
|
|
|
|
|
|
для: Maxam
(28.10.2012 в 16:21)
| |
<?
if($per_0 || $per_1) $error=true;
|
| |
|
|
|
|
|
|
|
для: confirm
(28.10.2012 в 16:31)
| | Нет нет, $per_0 - это я для схематичности. На самом деле там длинные строки проверки, так как вы показали точно нельзя. Я спросил именно относительно двух вариантов, мной написанных, какой лучше. | |
|
|
|
|
|
|
|
для: Maxam
(28.10.2012 в 20:19)
| | Если перменная не равна 0, пустой строке, белевому значению false и т.п., то переменная истина, и для этого достаточно проверки if(var). Сравнивать же как if(var==true) нужно тогда, когда требуется и проверка типа, но и сравнение в этом случае записывается как if(var===true).
В вашем примере переменная $error должна быть истиной когда любая из ваших переменных равна истине, и для этого достаточно простой записи, которую я и привел, и не важно при этом, что у вас там, длинные строки или ... Если у вас нечто неординарное, чего не заметно по примеру, значит описывайте свой вопрос полностью.
PS. Если "длинные строки проверки", это вы о количестве проверок, то в if-else-elseif может быть выполнена только первая веть, если истиным будет первое условие, или первая и вторая, если истина во втором, иначе все три. Отдельные условия будут проверены все. | |
|
|
|
|
|
|
|
для: confirm
(29.10.2012 в 02:55)
| | Да да да. Вот то, что написали в "PS" - это то, что я как раз хотел узнать. Спасибо большое. | |
|
|
|
|
|
|
|
для: Maxam
(29.10.2012 в 15:31)
| | А что проверяете то? Может быть можно и сократить это "длнинное"? | |
|
|
|
|
|
|
|
для: confirm
(29.10.2012 в 19:17)
| | Не получится, потому что там немного сложнее, чем я показал:
if($per_0==true)
{
$error=true;
$per='text';
}
elseif($per_1==true)
{
$error=true;
$per='new text';
}
|
| |
|
|
|
|
|
|
|
для: Maxam
(30.10.2012 в 03:35)
| | Я же вам говорил, что делать проверку как if($per_0==true) нет смысла, если вы не проверяете тип при этом, достаточно if($per_0) | |
|
|
|
|
|
|
|
для: confirm
(30.10.2012 в 03:46)
| | Я считал, что записи if($per==true) и if($per) идентичны, как <? и <?php.
Получается, что скорее всего идентичны будут записи if(empty($per)==false) и if($per)?
То есть:
<?php
$per_0=1;
$per_1=true;
$per_2='1';
$per_3='Текст';
// Ответ отрицательный:
if ($per_0===true)
{
// Код
}
// Ответ положительный:
if ($per_1===true)
{
// Код
}
// Ответ отрицательный:
if ($per_2===true)
{
// Код
}
// Ответ отрицательный:
if ($per_3===true)
{
// Код
}
// Ответ положительный:
if ($per_0==true||$per_1==true||$per_2==true||$per_3==true)
{
// Код
}
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(30.10.2012 в 13:14)
| | Хотя, если как вы говорите, то скорее правильней будет:
<?php
$per_0=1;
$per_1=true;
$per_2='1';
$per_3='Текст';
$per_4=0;
$per_5=false;
$per_6='0';
// Ответ положительный:
if ($per_0||$per_1||$per_2||$per_3)
{
// Код
}
// Ответ положительный:
if ($per_4||$per_5)
{
// Код
}
// Ответ отрицательный:
if ($per_4===true||$per_5===true)
{
// Код
}
// Ответ отрицательный:
if ($per_6===false)
{
// Код
}
?>
|
Просто я никогда не использовал тройное равенство. Не знаю, что это значит. | |
|
|
|
|
|
|
|
для: Maxam
(30.10.2012 в 13:14)
| | Все правильно, так как вы проверяете не только значение переменной, но и ее тип (строгое равенство), поэтому условие вернет истину только для $per_1, так как ее значение булево, с чем вы и сравниваете в условии.
А если вас интересует только истина, то достаточно ее проверки, те есть писать $per==true, это излишне, так как все ваши переменные в примере ее и возвратят условие, то есть true.
Кстати, по вашему посту, уж больно идентичны операции в каждом условии, может все таки подумать о возможности не писать кучами проверки? | |
|
|
|
|
|
|
|
для: confirm
(30.10.2012 в 13:27)
| | У меня там функции, каждая проверяет правильность заполнения полей в форме (email, дата рождения, пол, пароль), то есть:
<?php
if(email($_POST['email'])==false)
{
$error = true;
$text='Неправильный email';
}
if(pol($_POST['pol'])==false)
{
$error = true;
$text='Неправильный пол';
}
if(birthday($_POST['birthday'])==false)
{
$error = true;
$text='Неправильная дата рождения';
}
if(password($_POST['password'])==false)
{
$error = true;
$text='Неправильный пароль';
}
if($error==true)
{
$_SESSION['error']=$text;
header('location:./signin.php');
exit;
}
?>
|
| |
|
|
|
|
|
|
|
|
для: confirm
(30.10.2012 в 13:27)
| | Спасибо. Изучаю php.su, нашёл текст, прямо как вы говорили )
<?php
// == это оператор, который проверяет
// эквивалентность и возвращает булево значение
if ($action == "показать_версию") {
echo "Версия 1.23";
}
// это не обязательно...
if ($show_separators == TRUE) {
echo "<hr>\n";
}
// ...потому что вы можете просто написать
if ($show_separators) {
echo "<hr>\n";
}
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(31.10.2012 в 16:57)
| | Скачивайте расширенное руководство, и в нем найдете все. Чтобы понять почему, и что это не от того, что я сказал так, смотрите пример ниже, проливающий свет:
<?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
|
| |
|
|
|