Сегодня решил сделать над собой усилие и наконец-то выучить приоритеты выполнения операторов, или, говоря нормальным языком – operator precedence rules.
Так как я всегда использую скобки для явного указания очередности исполнения операторов, особых проблем с операторами у меня не было. Однако, готовясь к сертификации, я подумал, что возможно стоит именно знать, а не просто иметь представление.

Рассмотрим небольшой пример:

$x = 1;
var_dump(!$x * 5);      // int(0)

Результат вполне ожидаем: так как ! имеет более выский приоритет (унарные операторы являются одними из самых приоритетных, выше только квадратная скобка [ и оператор new), то сначала преобразовывается выражение

!$x // !1 = 0

а затем уже происходит умножение на 5, что и дает общий результат равный нулю.

Однако мы не можем применять ту же логику в выражении ниже (хотя, следуя документации логика абсолютно легитимна):

var_dump(!$x = 5);      // bool(false)

Несмотря на то что знак равенства =, так же как и знак плюса в примере выше, имеет меньший приоритет, чем унарный оператор !, PHP достаточно умен чтобы не интерпритировать все буквально (иначе должна быть выдана Parse Error – так как выражение 0 = 5, полученное следуя правилам очередности операторов, не имеет смысла). PHP парсер сначала выполняет

$x = 5;

и только после этого применяет оператор отрицания !, что и дает нам результат:

bool(false)

Удачных выходных!

  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Reddit
  • Technorati
  • email
  • Print
  • DZone
  • eKudos
  • LinkedIn
  • StumbleUpon
  • Tumblr
  • Twitter
,
Trackback

no comment untill now

Add your comment now