Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
switch ($x)
{
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
$errors = array();
if (!is_numeric($phone)) $errors[] = 'badphone';
if (!is_email($email)) $errors[] = 'email';
if (!foo($bar)) $errors[] = 'quux';
if (!empty($errors)) boo();
public function isEmpty($field)
{
return (!isset($this->data[$field]) || strlen(trim($this->data[$field])) == 0);
}
if (func1($a)) {...}
elseif (func2($a)) {...}
elseif (func3($a)) {...}switch(true)
{
case (func1($a)):
...;
break;
case (func2($a)):
...;
break;
case (func3($a)):
...;
break;
}
и<?php
if (myFunc($x) == 1)
{
echo 1;
}
elseif (myFunc($x) == 2)
{
echo 2;
}
elseif (myFunc($x) == 3)
{
echo 3;
}
else
{
echo 4;
}
?>
<?php
switch (myFunc($x))
{
case(1):
echo 1;
break;
case(2):
echo 2;
break;
case(3):
echo 3;
break;
default:
echo 4;
break;
}
?>
Можете попробовать сами, но у меня этот скрипт выводит:<?php
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function check1()
{
sleep(1);
return false;
}
function check2()
{
sleep(2);
return false;
}
function check3()
{
sleep(3);
return true;
}
function check4()
{
sleep(4);
return false;
}
/* ============ */
$ie_time_start = getmicrotime();
if (check1())
{
echo '1';
}
elseif (check2())
{
echo '2';
}
elseif (check3())
{
echo '3';
}
elseif (check4())
{
echo '4';
}
$ie_time = getmicrotime() - $ie_time_start;
/* ============ */
$sw_time_start = getmicrotime();
switch (true)
{
case(check1()):
echo '1';
break;
case(check2()):
echo '2';
break;
case(check3()):
echo '3';
break;
case(check4()):
echo '4';
break;
}
$sw_time = getmicrotime() - $sw_time_start;
/* ============ */
echo '<hr />';
echo 'ElseIf has taken ' . round($ie_time, 4);
echo '<br />';
echo 'Switch has taken ' . round($sw_time, 4);
?>
ElseIf has taken 5.9997Хотя, по вашей древесной теории switch в данном случае должен занимать никак не меньше 10 секунд, «проходя по всему дереву, ища совпадения»...
Switch has taken 6.0001
PHP: проверка данных