Codecourse

Operatorlar

Operatorun prioriteti

Əgər PHP ifadəsində bir neçə operator varsa, onların icra ardıcıllığı prioritet vasitəsilə müəyyənləşdirilir.

1 + 5 * 3 ifadəsi ekrana 18 yox, 16 çıxaracaq. Nə üçün? Çünki, vurma ("*") operatoru toplama ("+") operatoru ilə müqayisədə daha yüksək prioritə malikdir. Dairəvi mötərizələr cütlüyü operatorların icra ardıcıllığını dəyişmək üçün istifadə oluna bilər, yəni (1 + 5) * 3 ifadəsi artıq ekrana 18 çıxaracaq.

Operatorlar eyni prioritetə malik olduğu halda, onların qruplaşdırılması assosiativlik vasitəsilə təyin edilir. Məsələn çıxma ("-") operatoru sol assosiativliyə malikdir, buna görə 1 - 2 - 3 ifadəsi (1 - 2) - 3 kimi qruplaşdırılır və ekrana -4 çıxarılacaq. Mənimsətmə ("=") operatoru isə sağ assosiativliyə malikdir, buna görə $a = $b = $a ifadəsi $a = ($b = $c) kimi qruplaşdırılır.

Eyni prioritetli, amma assosiativliyə malik olmayan operatorların istifadəsi ekrana səhv çıxaracaq. Məsələn, PHP proqramlaşdırma dilində 1 < 2 > 1 ifadəsi yolverilməzdir.

Aşağıdakı cədvəldə göstərilmiş operatorların siyahısı onların prioriteti üzrə sıralanıb. Daha yüksək prioritetli operatorlar cədvəlin yuxarı hissəsində, aşağı prioritetlilər isə aşağı hissəsində yerləşib.

Operatorların icra ardıcıllığı
Assosiativlik Operator
Sol [
Sağ **
Sağ ++ -- ~ (int) (float) (string) (array) (object) (bool) @
Assosiativ deyil instanceof
Sağ !
Sol * / %
Sol + - .
Sol << >>
Assosiativ deyil < <= > >=
Assosiativ deyil == != === !== <>
Sol &
Sol ^
Sol |
Sol &&
Sol ||
Sol ? :
Sağ = += -= *= **= /= .= %= &= |= ^= <<= >>= =>
Sol and
Sol xor
Sol or
Sol ,
<?php
$b = 5;
$a = $b -= 4;
echo "a = ".$a." b = ".$b; // a = 1 b = 1
?>

Operatorların icra ardıcıllığını dəyişmək üçün dairəvi mötərizələr cütlüyündən istifadə edin. Belə ki, 3 * 5 + 5 ifadəsi ekrana 20 çıxaracaq, çünki vurma əməliyyatı birinci icra olunur. Amma dairəvi mötərizələrdən istifadə etməklə icra ardıcıllığını dəyişmək olar.

<?php
$result = 3 * (5 + 5);
echo $result; // 30
?>

Riyazi operatorlar

Operator Əməliyyat Nəticə
+ Toplama İki operandın cəmi
- Çıxma İki operandın fərqi
* Vurma İki operandın hasili
/ Bölmə İki operandın nisbəti
% Modul Birinci operandın ikinciyə bölünməsindən sonra qalan qalıq
** Qüvvətə yüksəltmə PHP 5.6 versiyasında daxil edilib.

Modul əməliyyatı zamanı operandlar tam ədədə konvertasiya olunur.

<?php
echo (5 + 4)."<br />\n"; // 9
echo (5 - 4)."<br />\n"; // 1
echo (5 * 4)."<br />\n"; // 20
echo (5 / 4)."<br />\n"; // 1.25
echo (5 % 4)."<br />\n"; // 1
echo (5 ** 4)."<br />\n"; // 625
?>

Mənimsətmə operatoru

Mənimsətmə operatoru "=" işarəsi kimi göstərilir. İlk baxışdan elə təsəvvür yarana bilər ki, bu, bərabərlik simvoludur, qətiyyən belə deyil. Sözügedən operator onu bildirir ki, soldakı operand sağdakı ifadənin qiymətini alır.

<?php
$fruit = “apple”; // fruit dəyişəninə apple qiyməti mənimsədilir
?>

Qeyd edim ki, mənimsətmə operatorunun prioriteti çox aşağıdır. Buna görə $x = 2 * 2 +1 ifadəsində ilk növbədə riyazi əməliyyatlar (onların prioriteti yüksəkdir), daha sonra mənimsətmə əməliyyatı icra olunur.

<?php
$x = 2 * 2 + 1;
echo $x; // 5
?>

Bir ifadəni eyni anda bir neçə dəyişənə mənimsətmək olar.

<?php
$n = $m = $p = 3 * 5;
echo $n."<br />\n"; // 15
echo $m."<br />\n"; // 15
echo $p."<br />";   // 15
?>

Müqayisə operatorları

Müqayisə operatorları
Nümunə Nəticə
$a == $b Tiplərin konvertasiyasından sonra $a$b bərabərdirsə, TRUE qaytarır
$a === $b $a$b bərabərdirsə və eyni tipə malikdirsə, TRUE qaytarır
$a != $b Tiplərin konvertasiyasından sonra $a$b bərabər deyilsə, TRUE qaytarır
$a <> $b Tiplərin konvertasiyasından sonra $a$b bərabər deyilsə, TRUE qaytarır
$a !== $b $a$b bərabər deyilsə və ya müxtəlif tipə malikdirlərsə, TRUE qaytarır
$a < $b $a $b-dən kiçikdirsə, TRUE qaytarır
$a > $b $a $b-dən böyükdürsə, TRUE qaytarır
$a <= $b Əgər $a $b-dən kiçikdirsə və ya bərabərdirsə, TRUE qaytarır
$a >= $b Əgər $a $b-dən böyükdürsə və ya bərabərdirsə, TRUE qaytarır

Müqayisə operatorları iki qiyməti müqayisə etməyə imkan verir, ya FALSE, ya da TRUE qaytarır.

Rəqəm sətirlə və ya rəqəmdən ibarət iki sətir müqayisə edildikdə hər bir sətir rəqəmə konvertasiya edilir və bundan sonra rəqəm kimi müqayisə edilir. Bu qayda, həmçinin switch operatoruna da aiddir. === və ya ! == müqayisə operatorlarından istifadə zamanı tiplər konvertasiya olunmur, çünki bu halda qiymətlərdən başqa, həmçinin tiplər müqayisə olunur.

<?php
var_dump("10a" == 5); // false
var_dump(0 == "b"); // true
?>

Müqayisə zamanı operandlardan biri məntiqi tip olduqda digəri də məntiqi tipə çevrilir.

<?php
var_dump("" == false); // true
var_dump(100 == true); //true
?>

İnkrement və dekrement operatorları

PHP proqramlaşdırma dilində $a += 1 və $b -= 1 tipli ifadələrdən geniş istifadə ilə əlaqədar inkrement (artırma) və dekrement (azaltma) operatorları tətbiq olunur.

Qeyd

İnkrement/dekrement operatorları yalnız sətir və ədədlərlə işləyir, massiv, obyekt və resursları dəstəkləmir. NULL qiymətinin dekrementi ekrana heç nə çıxarmayacaq, inkrementi isə 1-ə bərabərdir.

İnkrement və dekrement operatorları
Nümunə Ad Nəticə
++$a Öncədən artırma $a dəyişəninin qiymətini 1 vahid artırır, sonra dəyişənin qiymətini geri qaytarır.
$a++ Sonradan artırma $a dəyişəninin qiymətini geri qaytarır, sonra dəyişənin qiymətini 1 vahid artırır.
--$a Öncədən azaltma $a dəyişəninin qiymətini 1 vahid azaldır, sonra dəyişənin qiymətini geri qaytarır.
$a-- Sonradan azaltma $a dəyişəninin qiymətini geri qaytarır, sonra dəyişənin qiymətini 1 vahid azaldır.
<?php
$x = 0;
$result = $x++;
echo "Sonradan artırma: result = $result, x = $x<br>";
   
$x = 0;
$result = ++$x;
echo "Öncədən artırma: result = $result, x = $x<br>";

$x = 2;
$result = $x--;
echo "Sonradan azaltma: result = $result, x = $x<br>";

$x = 2;
$result = --$x;
echo "Öncədən azaltma: result = $result, x = $x<br>";
?>

Yuxarıdakı kodun nəticəsi:


  Sonradan artırma: result = 0, x = 1

  Öncədən artırma: result = 1, x = 1

  Sonradan azaltma: result = 2, x = 1

  Sonradan azaltma: result = 1, x = 1

Növbəti dərsi seçib keçid düyməsinə sıxın: