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
?>
İşleç Önceliği
İşleç önceliği iki ifadenin birbirine hangi sıkılıkta bağlı olduğunu belirtir. Örneğin, 1 + 5 * 3 ifadesinin sonucu 18 değil, 16'dır. Çünkü, çarpma ("*") işlecinin önceliği toplama ("+") işlecinden yüksektir. Önceliği arttırmak için gerekirse parantezler kullanılabilir. Örneğin, (1 + 5) * 3 ifadesinin sonucu 18 olacaktır. Eğer işleç önceliklerinde eşitlik sözkonusu olursa soldaki işleç sağdakinden öncelikli olur.
Aşağıdaki listede işleçler en yüksek öncelikliden başlayıp en düşük öncelikliye doğru sıralanmışlardır. Aynı satırda yer alan işleçler eşöncelikli olup hangi sırada ele alınacaklarına değerlendirme sırasında karar verilir.
| İlişkilendirme | İşleçler | Ek bilgi |
|---|---|---|
| yönsüz | clone new
|
clone ve new |
| soldan | [
|
array() |
| yönsüz | ++ --
|
arttırım/eksiltim |
| yönsüz | ~ - (int) (float) (string) (array) (object) (bool)
@ |
Türler |
| yönsüz | instanceof
|
Türler |
| sağdan | !
|
mantıksal |
| soldan | * / %
|
aritmetik |
| soldan | + - .
|
aritmetik ve dizge |
| soldan | << >>
|
bitsel |
| yönsüz | < <= > >= <>
|
karşılaştırma |
| yönsüz | == != === !==
|
karşılaştırma |
| left | &
|
bitsel ve gönderimler |
| soldan | ^
|
bitsel |
| soldan | |
|
bitsel |
| soldan | &&
|
mantıksal |
| soldan | ||
|
mantıksal |
| soldan | ? :
|
üç terimli |
| sağdan |
= += -= *= /= .= %= &= |= ^= <<= >>=
|
atama |
| soldan | and
|
mantıksal |
| soldan | xor
|
mantıksal |
| soldan | or
|
mantıksal |
| soldan | ,
|
birçok kullanım |
Soldan ilişkilendirme, ifadenin soldan sağa, sağdan ilişkilendirme ise sağdan sola değerlendirileceği anlamına gelir.
Örnek 1 - Öncelik yönü
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>
Parantezleri kodun okunabilirliğini arttırmak için kullanın.
Bilginize: Eşitlik (=) işleci çoğu işleçten daha düşük önceliğe sahip olduğundan PHP halen şuna benzer ifadelere izin vermektedir: foo() işlevinin dönüş değerini $a değişkenine atayan if (!$a = foo()) ifadesi.
İşleç Önceliği
07-Oct-2009 02:18
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
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;
?>
