2012-03-29 1 views
-8

У меня есть этот кусок кода:Почему PHP обрабатывает зависание иначе по-другому?

$a = false; 
if ($a) 
    echo 'A'; if (false) echo 'B'; 
    else echo 'C'; 

else заявление появляется на изменения «belongship» в зависимости от значения $a. Если это true, кажется, интерпретировать его как:

if ($a) 
{ 
    echo 'A'; 
    if (false) 
    { 
     echo 'B'; 
    } 
    else 
    { 
     echo 'C'; 
    } 
} 

и печатает AC. Но если $a = false, это, кажется, интерпретируя его как:

if ($a) 
{ 
    echo 'A'; 
    if (false) 
    { 
     echo 'B'; 
    } 
} 
else 
{ 
    echo 'C'; 
} 

и печатает C.

Я что-то упустил?

+5

Там нет неоднозначного кода в первом примере – zerkms

+3

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

+0

Остановитесь и подумайте об этом с точки зрения государства, и становится очевидным, почему происходят ваши два фрагмента (те, которые имеют {}). Это не то, как PHP на самом деле видит это, это просто логически эквивалентно потоку того, как PHP видит его (условно на $ a). – Corbin

ответ

10

Ваш первый код читается как

$a = false; 
if ($a) { 
    echo 'A'; 
} 

if (false) { 
    echo 'B'; 
} 
else { 
    echo 'C'; 
} 

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

+0

Я вижу. Я смутился, сосредоточившись на чем-то другом. Genius. – NullUserException

3

Оба набора результатов согласуются с единой интерпретации:

if ($a) 
{ 
    echo 'A'; 
} 
if (false) 
{ 
    echo 'B'; 
} 
else 
{ 
    echo 'C'; 
} 

Так что я бы предположил, что это то, что он делает.

4
$a = false; 
if ($a) 
    echo 'A'; if (false) echo 'B'; 
    else echo 'C'; 

равна

$a = false; 

if ($a) echo 'A'; 

if (false) echo 'B'; else echo 'C'; 

потому что if структура управления принимает заявление в качестве органа, см: http://php.net/if

И echo 'A'; является то, что утверждение. Таким образом, следующий if рассматривается как самостоятельный фрагмент кода.

2

Помогает, если вы получаете отступы правильного т.е.

$a = false; 

if ($a) echo 'A'; 

if (false) echo 'B'; 
else echo 'C'; 

а - ложно, результат C а - правда, результат AC

Смежные вопросы