Məntiqi ifadələr

PHP-də istənilən ifadə öz “məntiqi” mənasında məntiqi ifadə hesab edilə bilər. Belə ki, əvvəlki mövzularda qeyd edildiyi kimi məntiqi doğru rolunu istənilən sıfırdan fərqli rəqəm, sıfırla nəticələnməyən ifadə, boş olmayan yazı və s. ifadələr, məntiqi yanlış rolunu isə digər ifadələr oynaya bilər

Məntiq dəyişənləri haqqında danışılarkən qeyd edilmiş bütün xüsusiyyətlər məntiqi ifadələr üçün də doğrudur. Məntiqi ifadələr çox vaxt >, <== (bərabərlik), || (məntiqi VƏ YA), && (məntiqi VƏ), ! (məntiqi İNKAR) və s. operatorların istifadəsilə yaranır. Məsələn:

$less = 10 < 5;// $less - yalan $equals = $b == 1;// $equals - $b == 1 olarsa doğru, $between = $b >= 1 && $b <= 10;// $between - $b 1-dən 10-a qədər (10 daxil olmaqla) olarsa doğru
$x = !($b || $c) && $d;// $b və $c yalan, а $d - doğru olarsa true

Bu və ya digər məntiq dəyişəninin doğruluğu elə istənilən məntiqi ifadələrin yoxlanılması kimi eyni üsulla yerinə yetirilir:

$between = $x >= 1 && $x <= 7; // $between -ə ifadənin qiymətini mənimsədirik
if ($between) echo "x lazımi aralıqdadır";

İfadələr və əməliyyatlar

Əvvəlki mövzularda proqramın əməliyyat etdiyi dəyişənlər, onların tiplərinə ətraflı nəzər yetirildi. Bu bölmədə PHP proqramlaşdırma dilinin əsas imkanları haqqında danışılacaq.

İfadələr

Ümumi baxsaq, ifadələr PHP-in üzərində dayandığı sütunlardan biridir. Praktik olaraq proqramda nə yazılırsa hamısı ifadədir. İfadə dedikdə müəyyən mənaya malik “nəsə” başa düşülür. Bunun əksi də düzgündür. Əgər nəsə müəyyən mənaya malikdirsə bu elə ifadədir.

İfadəyə ən sadə misal olaraq mənimsətmə operatorunun sağ tərəfində dayanan dəyişən və ya sabiti göstərmək olar. Məsələn: $a = 5; operatorunda 5 rəqəmi ifadədir, çünki o, 5 qiymətinə malikdir. Belə mənimsətmədən sonra biz haqlı olaraq deyə bilərik ki, $a 5-dir. Bundan sonra $b = $a; yazsaq aydındır ki, $b də 5 olacaq, çünki operatorun sağında yerləşmiş $a 5 qiymətinə malikdir.

Əvvəldə yazdığımız kimi, praktiki olaraq proqramı tərtib etdiyimiz hər şey ifadədir və $b = $a yazısı da həmçinin ifadədir. Bu ifadənin qiymətini asanlıqla təxmin etmək olar: 5. Bu isə o deməkdir ki, aşağıdakı kimi əmrlər də yazmaq olar:

$a = ($b = 10);   // və ya sadəcə $a = $b = 10

Bu zaman $a$b dəyişənlərinə 10 qiyməti mənimsədiləcək. Daha mürəkkəb, trivial görsənməyən misala baxaq:

$a = 3 * sin($b = $c + 10) + $d

Bu əmrlərin yerinə yetirilməsindən sonra dəyişənin qiyməti aşağıdakı sətirlərin yerinə yetirilməsi ilə eyni hüquqlu olacaq:

$b = $c + 10;
$a = 3 * sin($c + 10) + $d;

Göründüyü kimi, PHP-də mürəkkəb ifadənin hesablanması zamanı onun müəyyən hissəsi növbəti sətrlərdə lazım olacaqsa, o hissəni dəyişənlə göstərmək olar. Bu üsul işi çox rahatlaşdıra, proqramın kodunu xeyli qısalda bilər. Bu zaman kodun oxunaqlığı əvvəlki səviyyədə qalır. Buna görə də bu üsuldan lazım olduqca istifadə etmək məsləhətdir.

Qeyd etmək lazımdır ki, hər bir ifadənin qiymətinin özünün tipi var. Məsələn:

$a = 10 * 20; 
$b = "" . (10 * 20); 
echo "$a:".gettype($a).", $b:".gettype($b); // "200:integer, 200:string" çap olunacaq

Mənimsətmə operatoru

Mənimsətmə – proqramlaşdırmada dəyişənlər ilə onların qiymətləri arasında əlaqələri dinamik olaraq dəyişməyə imkan verən mexanizmdir. Aydındır ki, qiymətin dəyişdirilməsi mənimsətmə əməliyyatının nəticəsidir və bir çox proqramlaşdırma dillərində bu əməliyyatın özü də müəyyən nəticə (adətən, mənimsədilən qiymətin eynisini) qaytarır. Fiziki olaraq isə mənimsətmə kompüterin yaddaşı və ya prosessorunun reqistrlərinə yazmaq və ya yenidən yazmaqdan ibarətdir.

Əvvəlki mövzularda bu operatorla rastlaşmışıq və PHP-də onun yazılış forması bərabər işarəsi – “=” kimidir. Sadə mənimsətmə əməliyyatının ümumi sintaksisi $dəyişənin_adı = qiymət; formasındadır. Əslində mənimsətmə əməliyyatının yazılış simvolunun seçilməsi proqramlaşdırma dillərinin yaradıcıları arasında çox mübahisələrə səbəb olur. Belə bir fikir var ki, = işarəsindən mənimsətməni işarələmək üçün istifadə edilməsi proqramlaşdırma dilinə iki operandın müqayisəsi üçün əlavə == işarəsini gətirməyə məcburiyyət yaradır və bu, proqramçıları dolaşığa salır, nəticədə mənimsətmə operatoru müqayisə operatoru ilə səhf salınır.

Bəzi dillərdə, məsələn C dilində if (a == b) { ... } əvəzinə if (a = b) { ... } yazsaq, yəni bilməyərəkdən = işarəsinin birini buraxmış olsaq kompilyator ən azı xəbərdarlıq göstərəcək. PHP-də isə məsələ fərqlidir. Bunu özünüzün də yoxlamağınız məsləhətdir.

$a = 0; $b = 0;
if($a = $b) echo "a və b eynidir";
else  echo "a və b fərqlidir";

İnterpretator heç nə hiss etdirməyəcək və proqram əminliklə “a və b eynidir” olduğunu bildirəcək. Göründüyü kimi proqram heç də düzgün nəticəni vermir. Buna səbəb $a = $b yazılışının məsələn, $a + $b kimi bir ifadə olmasıdır və bu yazılışın nəticəsi mənimsətmə operatorunun sağ tərəfinin qiymətinə, bizim halda 1-ə bərabərdir. Buna görə də belə məsələlərdə diqqətli olmaq mütləqdir.

PHP proqram nümunəsi

İndi isə PHP dilində ənənəvi “Hello, world!” proqramına baxaq:

<?php
echo "Hello, world!";
?>

PHP-skript öz təbiətinə görə adi CGI-skriptlərdən müəyyən qədər fərqlidir. Yuxarıda göstərilən proqramı başqa üsulla yazmaq olar. İndi yazacağımız nümunə bu fərqi izah edəcək. PHP sintaksisi ilə heç vaxt qarşılaşmayanlar üçün bu daha maraqlı görsənəcək.

<body>
Hello, world!
</body>

Bəli, burda həqiqətən də heç bir PHP operatoru yoxdur və “proqram” faylının daxili statik mətndən ibarətdir. Belə çıxır ki, adi HTML mətni də PHP tərəfindən normal emal olunur? Bəli, bu belədir. Ancaq gəlin, daha mürəkkəb nümunəyə baxaq:

<!DOCTYPE html>
<html lang='az'>
    <head>
        <title>Sadə PHP skript</title>
        <meta charset='utf-8'>
    </head>
<body>
    <p>
        <?php 
        //bu günkü tarixi "gün.ay il" formatında hesablayaq
        $date = date("d.m y"); 
        //bu andakı saatı hesablayaq
        $time = date("h:i:s");
        # onları çap edək
        echo "Tarix: $date il<br />n";
        echo "Saat: $time<br />n"; 
        # Rəqəmləri çap edək
        echo "İlk 5 natural ədədlərin kvadrat və kubları:<br />n"; 
        echo "<ul>n";
        for ($i = 1; $i <= 5; $i++) { 
            echo "<li>$i kvadratı = " . ($i * $i); 
            echo ", $i kubu = " . ($i * $i * $i) . "</li>n"; 
        }
        ?>
        </ul>
    </p>
</body>
</html> 

Çox güman ki, hər hansı bir dilin sintaksisini nümunələrə baxaraq diaqram və ya sxemlərə nisbətən daha rahat “hiss etmək” olar. İrəlidə biz də bu prinsipə əsalanacağıq. Yazılmış proqramı başa düşməyə çalışaq.

Skriptin əvvəlinə diqqət yetirsək görərik ki, burda çaşdırıcı nüans var. <html>, <body> HTML teqləri burda nə iş görür? Bu həqiqətən skriptdirmi? Bax elə bu məsələdə PHP dilinin əsas üstünlüyü gizlənir: göründüyü kimi, PHP-skript adi HTML-sənəddən heç fərqlənməyə bilər.

Davam edək. Yəqin fikir verdiniz ki, skriptlər <?php teqi ilə başlayıb  ?> teqi ilə bitir. Beləliklə bu iki teq daxilindəki yazılar proqram kimi interpretasiya edilir və HTML-sənəddə görsənmir. Proqrama nəyisə çap etmək lazım gəldikdə isə echo operatorundan istifadə edilməlidir. İrəlidə onun necə işlədiyinə ətraflı baxacağıq. Beləliklə, aydın olur ki, PHP elə qurulub ki, <?php?> proqram bloklarından kənarda olan bütün yazılar olduğu kimi brauzerə ötürülür, yəni echo operatorunun nəticəsi kimi başa düşülür.

Yəqin ki, // işarəsindən sonrakı yazıların kommentariya olduğunu başa düşmüsünüz. Kommentariyalar proqramın gedişatına heç bir təsir göstərmir. Bir sətirlik kommentariyaları həmçinin, nümunədən göründüyü kimi, # işarəsi ilə də ayırmaq olar. Kommentariyalar çox sətirlik də ola bilər:

/*
kommentariya
... kommentariyanın növbəti sətri
*/

Davam edək. Növbəti sətir:

$date = date("d.m y"); 

Bu sətrin gördüyü işi izah edək. $date adlı dəyişənə date() funksiyasının qaytardığı dəyər mənimsədilir. Nəzərinizdə saxlayın ki, PHP-də mütləq şəkildə bütün dəyişənlər $ işarəsi ilə başlayır, çünki interpretasiya üçün bu daha rahatdır. Beləliklə görürük ki, PHP-də birinci olaraq dəyişənləri əvvəlcədən elan etməyə ehtiyac yoxdur (məsələn, Pascal və C dilindən fərqli olaraq), ikincisi isə onların tipi (yazı, işarə, tam ədəd və s.) heç yerdə göstərilmir. İnterpretator nəyin harda hansı tipdə olduğuna özü qərar verir. date() funksiyası haqqında qeyd etmək lazımdır ki, ona nəticənin formatını müəyyən edən bir parametr ötürülür. Bizim halımızda bunun nəticəsi məsələn, 07.11 2017 kimi olacaq.

Bütün operatorların sonunda C dilində olduğu kimi nöqtəli vergül dayanmalıdır (;). Diqqət yetirin ki, Pascal-dakı kimi yox, məhz C dilindəki kimi. Başqa sözlə, siz if-else konstruksiyasında else-dən əvvəl mütləq nöqtəli vergül yazmalı, funksiyanın başlığından sonra isə yazmamalısınız.

Növbəti sətirdə yenidən kommentariya, sonra isə əvvəlkinə bənzər digər operatoru görürük. O, $time dəyişəninə date() funksiyasını yenidən çağıraraq “saat:dəqiqə:saniyə” formatında cari saatı mənimsədir. Gələcəkdə bu faydalı funksiyanın bütün imkanları ətraflı təsfir ediləcək.

Növbəti sətirdə kommentariya, sonra isə yazı sətirlərini, tarix və saatı çap edən echo operatorları gəlir. Onlardan birinə baxaq:

echo "Tarix: $date il<br />n";

Diqqət yetirin! İstənilən dəyişənin $ işarəsi ilə başlaması onu interpretatorun yazının istənilən yerində $date əvəzinə yerləşdirməsinə imkan verir (istənilən yazının, yəni bu yazının echo-un parametri olması vacib deyil). Əslində echo konstruksiyasının parametrlərinin sayı məhtud olmadığından bu sətiri belə də yazmaq olar:

echo "Tarix:", $date, "il<br />n";

və ya yazıları birləşdirmək üçün . əməlindən istifadə etməklə belə yaza bilərik:

echo "Tarix:" . $date . "il<br />n";

Yeri gəlmişkən, yazıların konkatenasiyası üçün niyə məsələn + işarəsi yox məhz nöqtə – . istifadə edilməsi sualına sadə bir misalla cavab vermək olar:

$a = "100";
$b = "200";
echo $a + $b; // nəticə "300" 
echo $a . $b; // nəticə "100200" 

Görünür ki, + məhz rəqəmlərlə, . isə yazı ilə işləyən operator kimi istifadə edilir. Operatorların tətbiqində nyüansları növbəti mövzularda aydınlaşdırcağıq.

Dəyişənlərin yazı daxilinə birbaşa “daxil edilməsinə” aid növbəti nümunə:

$path = "/home/site/public_html"; $name = "script"; $ext = "php";
$fullPath = "$path/$name.$ext";

Belə yazılış aşağıdakı kimi yazılışdan daha “gözəl” görsənir:

$path = "/home/site/public_html"; $name = "script"; $ext = "php";
$fullPath = $path . "/" . $name . "." . $ext;

Perl terminləri ilə desək, cüt dırnaq – "" işarələri arasında yazılmış yazı daxilindəki dəyişənlər interpretasiya edilir, yəni genişlənir. PHP-də yazıları təsfir etməyin başqa üsulu da var. Bu apastrof işarələri – '' arasındakı yazılardır. Bu işarələrin daxilində dəyişənlər interpretasiya edilmir.

Beləliklə demək olar ki, skriptimizin əsas hissəsinə – ilk 5 natural ədədin kvadrat və kubunu tapan “unikal” alqoritmə çatdıq. Həmin hissə aşağıdakı kimidir:

for ($i = l; $i <= 5; $i++) { 
   echo "<li>$i kvadratı = " . ($i * $i); 
   echo ", $i kubu = " . ($i * $i * $i) . "</li>n"; 
}

Birinci sətirdə for dövr operatoru müəyyən edilib. $i sayğacdır, ona başlanğıc olaraq 1 mənimsədilib və altıya çatana qədər hər addımda vahid qədər artır, inkrementasiya edir. Sonra kvadrat və kubu çap edən blok gəlir. Biz bilərkdən bu nümunədə çap etmək əməlini bir sətirdə yox iki sətirdə yazmışıq. Burda məqsəd PHP-də də C və bənzər dillərdəki kimi bir neçə operatoru fiqurlu mötərizə daxilində qruplaşdırıb yuxarıdakı kimi bir mürəkkəb operator – tərkib operator şəklinə gətirmək mümkün olduğunu göstərməkdir.

Nəhayət, bütün bunlardan sonra PHP-in bağlayan ?> teqi, sonra səhifəni sona yetirən adi HTML-teqlər gəlir.

Yazdığımız skriptin işləməsi nəticəsində aşağıdakı kimi HTML-kod əmələ gələcək:

<!DOCTYPE html>
<html lang='az'>
<head>
    <title>Sadə PHP skript</title>
    <meta charset='utf-8'>
</head>
<body>
<p>
    Tarix: 07.11 17 il<br />
    Saat: 12:23:27<br />
    İlk 5 natural ədədlərin kvadrat və kubları:<br />
    <ul>
        <li>1 kvadratı = 1, 1 kubu = 1</li>
        <li>2 kvadratı = 4, 2 kubu = 8</li>
        <li>3 kvadratı = 9, 3 kubu = 27</li>
        <li>4 kvadratı = 16, 4 kubu = 64</li>
        <li>5 kvadratı = 25, 5 kubu = 125</li>
    </ul>
</p>
</body>
</html>

Gördüyünüz kimi, skript yazılmış hissələrin nəticələri mətnin <?php?> işarələrindən kənarda olan hissələri ilə birləşdirilib. PHP-in əsas gücü məhz buna, kodun mətnin daxilinə asanlıqla daxil edilməsinə əsaslanıb.

Skripti ayıran <?..?><?php...?> teqləri eyni hüquqa malikdir. Ancaq nəzərə almaq lazımdır ki “qısaldılmış” <?..?> teqlərinin işləməsi üçün PHP-in php.ini konfiqurasiya faylında short_open_tag  opsiyası qoşulmuş olmalıdır (susmaya görə qoşulmamış olur).  Qısaldılmış teqlər köhnəlmiş hesab edilir və onlardan istifadə etmək məsləhət görülmür.

PHP 7 nədir

PHP 7 PHP proqramlaşdırma dilinin əsas versiyalarından biridir və mobil və digər qurğular, o cümlədən paylanmış (cloude) texnologiyalar üçün veb proqramlaşdırma sahəsində inqilab edə biləcək versiya kimi təqdim edilir. Bu versiya PHP-in 2004-cü ildə istifadəyə verilmiş PHP 5 versiyasından sonrakı ən əsas yenilənmiş versiyasıdır.

PHP7-də olan yeniliklərdən aşağıdakıları qeyd etmək olar:

  • yeni <=>?? operatorları
  • proqramda baş verəcək səhvlərin kəsilmələr vasitəsilə emal edilməsi, mövcud Exception klasından başqa PHP-də standart səhfləri emal etməyə imkan verən yeni Error klası daxil edilib.
  • anonim klaslar
  • funksiyaların ötürülən arqument və qaytardığı dəyərlərinin tiplərinin elan edilməsi imkanı
  • UTF-8 simvolların dəstəklənməsi üçün xüsusi u{00FF} sintaksisi
  • massiv-sabitlər
  • ArrayAcces interfeysinə uyğunlaşan obyektlərlə list konstruksiyasına icazə verilir
  • UTF-8 simvolları dəstəkləmək üçün IntlChar klası müəyyən edilib
  • Generator klasına return açar sözü vasitəsilə qaytarılan dəyərini əldə etməyə imkan verən  getReturn() metodu əlavə edilib
  • yield from açar sözləri vasitəsilə generatorların ötürülməsi
  • requlyar Perl-ifadələrlə işləyən preg_ replace_ callback_ array()  funksiyası əlavə edilib
  • yeni random_int() və  random_bytes() funksiyaları
  • sessiyanın parametrlərini session_start() funksiyasının vacib olmayan arqumenti vasitəsilə ötürmək olur

Yeniliklərlə birlikdə köhnəlmiş konstruksiyaların bir hissəsi də PHP-dən ümumiyyətlə ləğv edilib. Onlardan aşağıdakıları göstərmək olar:

  • <?php və  ?> teqləri əvəzinə istifadə edilə bilinən <%%>, həmçinin 
  • requlyar POSIX-ifadələr (eregi-funksiyalar), onların yerinə requlyar Perl-ifadələr istifadə etmək məsləhət görülür
  • mysql modulu, onun əvəzinə obyekt yönümlü mysqli modulu və ya bundan daha çox məsləhət görülən PDO-dan istifadə etmək lazımdır
  • adı klasın adı ilə eyni olan metod formasında PHP 4-ə uyğun konstruktordan istifadə etmək qadağandır

PHP nədir

PHP (İngilis dilində “Hypertext Preprocessor” söz birləşməsinin abreviaturası) geniş istifadə olunan, ümumi istifadə üçün nəzərdə tutulmuş, açıq kodlu skript dilidir. PHP əsasən veb layihələr üçün daha uyğundur. Bu dildə yazılmış kodlar birbaşa HTML-in daxilinə yerləşdirilə bilinir.

Nümunə PHP skript:

<!DOCTYPE HTML>
<html>
    <head>
        <title>Example</title>
    </head>
    <body>

        <?php
            echo "Hi, I'm a PHP script!";
        ?>

    </body>
</html>