downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Аритметични оператори> <Оператори
Last updated: Thu, 17 Sep 2009

view this page in

Приоритет на операторите

Приоритетът на операторите описва колко "плътно" даден оператор свързва два израза. Например, в израза 1 + 5 * 3 отговорът е 16, а не 18, защото операторът за умножение ("*") има по-висок приоритет от оператора за събиране ("+"). Ако е необходимо, могат да бъдат използвани скоби, за да се укаже изрично приоритет. Например: (1 + 5) * 3 се изчислява на 18. Ако два оператора имат еднакъв приоритет се използва асоциативност отляво надясно.

Следната таблица описва приоритета на операторите, като операторите с най-висок приоритет са най-отгоре. Операторите на един и същи ред имат еднакъв приоритет, в който случай редът им на изчисление зависи от съответната им асоциативност.

Приоритет на операторите
Асоциативност Оператори Допълнителна информация
без асоциативност clone new clone и new
лява [ array()
без асоциативност ++ -- инкрементиране/декрементиране
без асоциативност ~ - (int) (float) (string) (array) (object) (bool) @ типове
без асоциативност instanceof типове
дясна ! логически
лява * / % аритметични
лява + - . аритметични и низови
лява << >> побитови
без асоциативност < <= > >= <> сравнителни
без асоциативност == != === !== сравнителни
лява & побитови и референции
лява ^ побитови
лява | побитови
лява && логически
лява || логически
лява ? : третични
дясна = += -= *= /= .= %= &= |= ^= <<= >>= присвоителни
лява and логически
лява xor логически
лява or логически
лява , множество употреби

Лява асоциативност означава, че изразът се изчислява отляво надясно, дясна асоциативност - обратното.

Example #1 Асоциативност

<?php
$a 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5
?>
Използвайте скоби, за да увеличите прегледността на кода.

Забележка: Въпреки че = има по-нисък приоритет от повечето останали оператори, PHP позволява изрази като този: if (!$a = foo()), в който случай изходът на foo() се присвоява на $a.



add a note add a note User Contributed Notes
Приоритет на операторите
Patryk Bratkowski
07-Oct-2009 02:18
Please note that certain operators change the variable type in ways you may not expect.

If you want to append the result of an arithmetic operation to a string you have to do it in two steps:

<?php
    $ord
= $i + 1;
   
$field = "cellID" . $ord; // returns a string
   
$field = "cellID" . $i + 1; // because of the addition it returns an int
?>
headden at karelia dot ru
09-Jun-2009 11:02
Although example above already shows it, I'd like to explicitly state that ?: associativity DIFFERS from that of C++. I.e. convenient switch/case-like expressions of the form

$i==1 ? "one" :
$i==2 ? "two" :
$i==3 ? "three" :
"error";

will not work in PHP as expected
Pies
08-Feb-2009 07:22
You can use the "or" and "and" keywords' lower precedence for a bit of syntax candy:

<?php

$page
= (int) @$_GET['page'] or $page = 1;

?>

 
show source | credits | sitemap | contact | advertising | mirror sites