Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Условия elseif
 
 автор: Maxam   (28.10.2012 в 16:21)   письмо автору
 
 

День добрый.

Подскажите, если я поставлю условия:
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;
}
Что будет быстрее?

  Ответить  
 
 автор: confirm   (28.10.2012 в 16:31)   письмо автору
 
   для: Maxam   (28.10.2012 в 16:21)
 

<?
if($per_0 || $per_1$error=true;

  Ответить  
 
 автор: Maxam   (28.10.2012 в 20:19)   письмо автору
 
   для: confirm   (28.10.2012 в 16:31)
 

Нет нет, $per_0 - это я для схематичности. На самом деле там длинные строки проверки, так как вы показали точно нельзя. Я спросил именно относительно двух вариантов, мной написанных, какой лучше.

  Ответить  
 
 автор: confirm   (29.10.2012 в 02:55)   письмо автору
 
   для: Maxam   (28.10.2012 в 20:19)
 

Если перменная не равна 0, пустой строке, белевому значению false и т.п., то переменная истина, и для этого достаточно проверки if(var). Сравнивать же как if(var==true) нужно тогда, когда требуется и проверка типа, но и сравнение в этом случае записывается как if(var===true).
В вашем примере переменная $error должна быть истиной когда любая из ваших переменных равна истине, и для этого достаточно простой записи, которую я и привел, и не важно при этом, что у вас там, длинные строки или ... Если у вас нечто неординарное, чего не заметно по примеру, значит описывайте свой вопрос полностью.

PS. Если "длинные строки проверки", это вы о количестве проверок, то в if-else-elseif может быть выполнена только первая веть, если истиным будет первое условие, или первая и вторая, если истина во втором, иначе все три. Отдельные условия будут проверены все.

  Ответить  
 
 автор: Maxam   (29.10.2012 в 15:31)   письмо автору
 
   для: confirm   (29.10.2012 в 02:55)
 

Да да да. Вот то, что написали в "PS" - это то, что я как раз хотел узнать. Спасибо большое.

  Ответить  
 
 автор: confirm   (29.10.2012 в 19:17)   письмо автору
 
   для: Maxam   (29.10.2012 в 15:31)
 

А что проверяете то? Может быть можно и сократить это "длнинное"?

  Ответить  
 
 автор: Maxam   (30.10.2012 в 03:35)   письмо автору
 
   для: confirm   (29.10.2012 в 19:17)
 

Не получится, потому что там немного сложнее, чем я показал:
if($per_0==true) 

     $error=true;
     $per='text';

elseif($per_1==true) 

     $error=true; 
     $per='new text';
}

  Ответить  
 
 автор: confirm   (30.10.2012 в 03:46)   письмо автору
 
   для: Maxam   (30.10.2012 в 03:35)
 

Я же вам говорил, что делать проверку как if($per_0==true) нет смысла, если вы не проверяете тип при этом, достаточно if($per_0)

  Ответить  
 
 автор: Maxam   (30.10.2012 в 13:14)   письмо автору
 
   для: 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:21)   письмо автору
 
   для: 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)
{
// Код
}
?>

Просто я никогда не использовал тройное равенство. Не знаю, что это значит.

  Ответить  
 
 автор: confirm   (30.10.2012 в 13:27)   письмо автору
 
   для: Maxam   (30.10.2012 в 13:14)
 

Все правильно, так как вы проверяете не только значение переменной, но и ее тип (строгое равенство), поэтому условие вернет истину только для $per_1, так как ее значение булево, с чем вы и сравниваете в условии.
А если вас интересует только истина, то достаточно ее проверки, те есть писать $per==true, это излишне, так как все ваши переменные в примере ее и возвратят условие, то есть true.

Кстати, по вашему посту, уж больно идентичны операции в каждом условии, может все таки подумать о возможности не писать кучами проверки?

  Ответить  
 
 автор: Maxam   (30.10.2012 в 15:11)   письмо автору
 
   для: 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 в 15:59)   письмо автору
 
   для: Maxam   (30.10.2012 в 15:11)
 

http://www.php.net/manual/ru/book.filter.php

  Ответить  
 
 автор: Maxam   (31.10.2012 в 16:57)   письмо автору
 
   для: 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";
 }
?>

  Ответить  
 
 автор: confirm   (01.11.2012 в 01:51)   письмо автору
 
   для: 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)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования