Bir operatör bir veya daha fazla değer alır ve yeni bir değer üretir: $a + $b toplar, $a . $b stringleri birleştirir, $a && $b mantıksal VE'dir, $a === $b karşılaştırır, $i++ artırır.
/, iki tam sayı tam bölünmedikçe bir float döndürür: 17 / 5 sonucu 3.4, 10 / 5 sonucu ise tam sayı 2 olur. Yalnızca tam kısmı istediğinizde intdiv() kullanın. Yuvarlama matematik sayfasında anlatılıyor.
Aritmetik operatörler
| Operatör | Ad | Örnek | Sonuç |
|---|---|---|---|
+ | Toplama | 7 + 2 | 9 |
- | Çıkarma | 7 - 2 | 5 |
* | Çarpma | 7 * 2 | 14 |
/ | Bölme | 7 / 2 | 3.5 |
% | Mod (kalan) | 7 % 2 | 1 |
** | Üs | 7 ** 2 | 49 |
-$a | Olumsuzlama | -7 | -7 |
Mod, "her N'inci eleman" ve tek/çift kontrolleri için işe yarar. Sonucu sol tarafın işaretini alır ve sıfıra bölmek yakalayabileceğiniz bir hata fırlatır:
Atama operatörleri
= bir değer saklar. Her aritmetik ve string operatörünün, bir değişkeni yerinde güncelleyen birleşik bir biçimi vardır.
??=, null birleştirme operatörü ailesine aittir. Yalnızca değişken atanmamışsa veya null ise atama yapar.
Artırma ve azaltma: ++ ve --
$i++ mevcut değeri döndürür, sonra 1 ekler. ++$i 1 ekler, sonra yeni değeri döndürür. Fark yalnızca sonucu aynı ifadede kullandığınızda görünür.
Harf hilesi, tablo sütun adlarının (A, B, ... Z, AA) sıklıkla nasıl üretildiğini gösterir.
Mantıksal operatörler: &&, ||, ! ve xor
| Operatör | Ne zaman true |
|---|---|
$a && $b | ikisi de true ise |
$a || $b | en az biri true ise |
!$a | $a false ise |
$a xor $b | tam olarak biri true ise |
$a and $b, $a or $b | && ve || ile aynı, daha düşük öncelikle |
&& ve || kısa devre yapar: sol taraf sonucu zaten belirlediğinde sağ taraf değerlendirilmez. isset($user) && $user->isAdmin() ifadesini güvenli yapan budur.
and ile &&: öncelik tuzağı
and ve or, = operatöründen daha gevşek bağlanır; bu yüzden bir atamada değer saklandıktan sonra uygulanırlar. Bu klasik bir hatadır:
Düşük öncelik tek bir kalıpta işe yarar: atamanın önce gerçekleşmesini istediğiniz $file = fopen($path, 'r') or die('Cannot open');. Geri kalan her yerde && ve || kullanın.
String operatörleri: . ve .=
PHP'nin iki string operatörü vardır: . iki stringi birleştirir ("Grace" . " " . "Hopper"), .= ise bir değişkenin sonuna ekler ($html .= "<li>"). + asla string birleştirmez: "3" + "4" sayı olarak 7, "3" . "4" ise string olarak "34" olur. Stringler sayfası interpolasyonu ve tırnakları anlatır.
Karşılaştırma ve spaceship operatörü <=>
== türleri dönüştürdükten sonra karşılaştırır, === türü de kontrol eder, <=> ise -1, 0 veya 1 döndürür; sıralama callback'lerinin tam olarak ihtiyaç duyduğu da budur. Ayrıntılar ve gevşek karşılaştırma tablosunun tamamı karşılaştırma operatörleri sayfasında.
Dizi operatörleri
Dizilerde + bir birleşimdir: soldaki dizinin anahtarları kazanır ve sağdan yalnızca eksik anahtarlar eklenir. Sona eklemesini bekleyenleri şaşırtır. == aynı anahtar/değer çiftlerini kontrol eder, === ise ayrıca aynı sırayı ve türleri ister.
Bir listeyi diğerinin sonuna eklemek için array_merge() ya da spread sözdizimi [...$a, ...$b] kullanın.
Operatör önceliği
Bir ifade operatörleri karıştırdığında PHP onları sabit bir sırayla uygular. İnsanları en çok yanıltanlar, PHP 8.3'ün yazdırdığı sonuçlarla:
echo 2 + 3 * 4; // 14: * before +
echo (2 + 3) * 4; // 20
echo 2 ** 3 ** 2; // 512: right to left, 2 ** 9
echo -2 ** 2; // -4: ** before unary minus
echo "Sum: " . 2 + 3; // Sum: 5, since PHP 8 + runs before .
Emin değilseniz parantez ekleyin. Hiçbir maliyeti yoktur ve satırı okuyan bir sonraki kişi tabloyu hatırlamak zorunda kalmaz.
Sıkça Sorulan Sorular
PHP'de and ile && arasındaki fark nedir?
İkisi de mantıksal VE'dir, ama and operatörünün önceliği = operatöründen düşüktür. Bu yüzden $x = true and false; $x içine true saklar (önce atama gerçekleşir), $x = true && false; ise false saklar. İfadelerde && ve || kullanın, and/or operatörlerini atamaların dışında tutun.
PHP'de % ne işe yarar?
% mod operatörüdür: bir tam sayı bölmesinin kalanını döndürür, bu yüzden 10 % 3 sonucu 1 olur. Sonuç sol işlenenin işaretini alır (-7 % 3 sonucu -1). Float'lar için fmod() kullanın; % 0 ise bir DivisionByZeroError fırlatır.
PHP'de bir sayının kuvveti nasıl alınır?
** operatörünü kullanın: 2 ** 10 sonucu 1024. Sağdan birleşimlidir, bu yüzden 2 ** 3 ** 2 ifadesi 2 ** 9 = 512 olur ve tekli eksiden daha sıkı bağlanır, bu yüzden -2 ** 2 sonucu -4 olur. pow(2, 10) fonksiyonu da aynı işi yapar.
PHP'de $i++ ile ++$i arasındaki fark nedir?
İkisi de $i değerine 1 ekler. $i++ (son artırma) eski değeri döndürür ve sonra artırır; ++$i (ön artırma) önce artırır ve yeni değeri döndürür. Bir for döngüsünün adımı gibi tek başına bir satırda fark yoktur.