Buruq mötərizələrdə Php dəyişəni. PHP ifadələri. Sətirlərin rəqəmlərə çevrilməsi




Dəyişən $GLOBALS. Hazırda müəyyən edilmiş bütün skript qlobal əhatə dairəsi dəyişənlərinə istinadları ehtiva edən assosiativ massiv (massiv). Dəyişən adları massiv açarlarıdır.

Qlobal dəyişəni elan etmək üçün onu $GLOBALS massivində yerləşdirmək kifayətdir

$GLOBALS["testkey2"]="testvalue2";

Siz print_r($GLOBALS) istifadə edərək, $GLOBALS massivi dəyişənlərinin bütün dəyərlərini ekrana çap edə bilərsiniz; və ya bu kimi:

Foreach ($GLOBALS kimi $key=>$value) əks-səda "GLOBALS[".$key."] == ".$value."
";

Dəyişən $_SERVER.

    Dəyişən $_REQUEST- standart olaraq $_GET, $_POST və $_COOKIE dəyişənlərinin məlumatlarını ehtiva edən assosiativ massiv (massiv). $_REQUEST massivindəki dəyişənlər GET, POST və ya COOKIE metodları vasitəsilə skriptə ötürülür, ona görə də onlara etibar etmək olmaz, çünki onlar uzaq istifadəçi tərəfindən dəyişdirilmiş ola bilər. Onların mövcudluğu və müvafiq massivlərə məlumat əlavə etmək qaydası variables_order direktivi ilə müəyyən edilir (GPCS standart olaraq təyin edilir).

    Dəyişən $_SESSION

    Dəyişən $_ENV. Skript əmr satırından işə salınıbsa doldurulur. $_SERVER massivi $_ENV massivindəki bütün dəyişənləri ehtiva edir.

    Dəyişən $http_response_header

Şərh: 64 bitlik platformalarda PHP 7.0.0-da əldə edilə bilən sətir uzunluğu məhdudiyyəti yoxdur, 32 bitlik sistemlərdə və PHP-nin əvvəlki versiyalarında sətirlər 2 GB-dan (2147483647 bayt) böyük ola bilməz.

Sintaksis

Bir sətir dörd fərqli şəkildə müəyyən edilə bilər:

  • tək sitatlar
  • ikiqat sitatlar
  • nowdoc sintaksisi (PHP 5.3.0-dan bəri)

Tək sitatlar

Sətiri təyin etməyin ən sadə yolu onu tək dırnaqlara daxil etməkdir (simvol " ).

Sətir daxilində tək sitatdan istifadə etmək üçün ondan əks kəsik işarəsi ilə qaçın ( \ ). Əgər əks xəttin özünü yazmaq lazımdırsa, onun dublikatını çıxarın ( \\ ). Bütün digər əks kəsiklər adi simvollar kimi şərh olunacaq, bu o deməkdir ki, əgər siz digər qaçış ardıcıllıqlarından istifadə etməyə çalışsanız, məsələn \r və ya \n, onlar hər hansı xüsusi davranış əvəzinə olduğu kimi çıxacaqlar.

əks-səda "bu sadə bir simdir";

əks-səda "Həmçinin, sətirlərə daxil edə bilərsiniz
bu kimi yeni sətir simvolu,
Bu yaxşıdır"
;

// Çıxışlar: Bir gün Arnold dedi: "Mən qayıdacağam"
əks-səda "Bir gün Arnold dedi: "Mən qayıdacağam";

əks-səda "C:\\*.* silmisiniz?";

// Nəticələr: C:\*.* silmisiniz?
echo "C:\*.* silmisiniz?" ;

// Çıxış: Bu genişləndirilməyəcək: \n yeni sətir
əks-səda "Bu genişlənməyəcək: \n yeni sətir";

// Çaplar: $expand dəyişənləri də $ genişlənmir
əks-səda "$expand dəyişənləri də $ya genişlənmir";
?>

İkiqat sitatlar

Əgər sətir qoşa dırnaq (") içərisindədirsə, PHP aşağıdakı xüsusi simvol qaçış ardıcıllığını tanıyır:

Qaçış ardıcıllığı
Ardıcıllıq Məna
\n yeni sətir (ASCII-də LF və ya 0x0A (10))
\r vaqonun qaytarılması (ASCII-də CR və ya 0x0D (13))
\t üfüqi nişan (ASCII-də HT və ya 0x09 (9))
\v şaquli nişan (ASCII-də VT və ya 0x0B (11)) (PHP 5.2.5-dən bəri)
\e qaçış simvolu (ESC və ya ASCII-də 0x1B(27)) (PHP 5.4.4-dən bəri)
\f səhifə lenti (FF və ya ASCII-də 0x0C (12)) (PHP 5.2.5-dən bəri)
\\ əks kəsik
\$ dollar işarəsi
\" ikiqat sitat
\{1,3} bayta sığdırmaq üçün səssizcə axan səkkizlik simvolun müntəzəm ifadəsinə uyğun gələn simvollar ardıcıllığı (yəni "\400" === "\000")
\x(1,2) hexadecimal xarakterli normal ifadəyə uyğun gələn simvollar ardıcıllığı
\u(+) UTF-8 təqdimatında sətirlə xəritələşən Unicode xarakterli normal ifadəyə uyğun gələn simvollar ardıcıllığı (PHP 7.0.0-da əlavə edilib)

Tək dırnaqlar içərisində olan sətirdə olduğu kimi, hər hansı simvoldan qaçmaq da qaçış simvolunun özünü çap edəcək. PHP 5.1.1-dən əvvəl tərs kəsişmə \($var)çap olunmayıb.

Heredok

Sətirləri təyin etməyin üçüncü yolu heredoc sintaksisindən istifadə etməkdir: <<< . Bu ifadədən sonra siz identifikator, sonra yeni sətir göstərməlisiniz. Bundan sonra xəttin özü gəlir, sonra isə əlavəni bağlayan eyni identifikator.

Xətt lazımdır bağlama identifikatoru ilə başlayın, yəni. sətrin birinci sütununda olmalıdır. Bundan əlavə, identifikator bütün digər PHP teqləri ilə eyni adlandırma qaydalarına əməl etməlidir: yalnız hərf-rəqəm simvolları və alt xətt işarələrindən ibarət olmalıdır və rəqəmlə başlamamalıdır (alt xəttlərə icazə verilir).

Diqqət

Qeyd etmək çox vacibdir ki, bağlama identifikatoru olan sətirdə nöqtəli vergüldən başqa digər simvollar olmamalıdır ( ; ). Bu o deməkdir ki, şəxsiyyət vəsiqəsi girinti olmamalıdır və nöqtəli vergüldən əvvəl və ya sonra heç bir boşluq və ya nişan ola bilməz. Həmçinin başa düşmək lazımdır ki, bağlanan identifikatordan əvvəlki ilk simvol əməliyyat sisteminiz tərəfindən müəyyən edilmiş yeni sətir simvolu olmalıdır. Məsələn, UNIX sistemlərində, o cümlədən macOS, bu \n. Bağlama identifikatorundan dərhal sonra yeni sətir də olmalıdır.

Bu qayda pozularsa və bağlanan identifikator “təmiz” deyilsə, hesab olunur ki, bağlanan identifikator yoxdur və PHP onun axtarışını davam etdirəcək. Əgər bu halda düzgün bağlama identifikatoru heç vaxt tapılmırsa, bu, skriptin sonunda sətir nömrəsi ilə təhlil xətasına səbəb olacaq.

Beispiel #1 Yanlış sintaksis nümunəsi

sinif foo(
ictimai $bar =<<bar
Haqqımızda Şirkətin Adı: EOT;
// bağlanan identifikatordan əvvəl doldurmağa icazə verilmir
}
?>

Beispiel #2 Düzgün sintaksis nümunəsi

sinif foo(
ictimai $bar =<<bar
Haqqımızda Şirkətin Adı: EOT;
}
?>

Heredoc sinif sahələrini işə salmaq üçün istifadə edilə bilməz. PHP 5.3-dən etibarən bu məhdudiyyət yalnız onların daxilində dəyişənləri olan heredoklara aiddir.

Heredoc mətni iki dırnaqlı sətir kimi davranır. Bu o deməkdir ki, heredokda sitatlardan qaçmağa ehtiyac yoxdur, lakin siz yenə də yuxarıdakı qaçış ardıcıllıqlarından istifadə edə bilərsiniz. Dəyişənlər idarə olunur, lakin siz heredok daxilində mürəkkəb dəyişənlərdən istifadə edərkən sətirlərlə işləyərkən olduğu kimi diqqətli olmalısınız.

Beispiel #3 heredoc sətir tərifinin nümunəsi

$str =<<Xətt nümunəsi,
çoxlu xətti əhatə edir
heredoc sintaksisindən istifadə etməklə.
EOD;

Sinif foo
{
var $foo ;
var $bar ;

Funksiya __construct()
{
$this -> foo = "foo" ;
$bu ->
}
}

$foo = newfoo();
$name = "Ad" ;

əks-səda<<Mənim adım "$name"dir. Mən $foo -> foo yazıram .
İndi çıxarıram
( $foo -> bar [ 1 ]) .
Bu, böyük "A" hərfini çıxarmalıdır: \x41
Haqqımızda Şirkətin Adı: EOT;
?>

Mənim adım "Ad"dır. Mən Foo yazıram. İndi Bar2-ni çıxarıram. Bu, böyük "A" hərfini çıxarmalıdır: A

Verilənləri funksiya arqumentləri vasitəsilə ötürmək üçün heredoc sintaksisindən də istifadə etmək mümkündür:

5.3.0 versiyasından bəri heredoc sintaksisindən istifadə edərək statik dəyişənləri və sinif xassələrini/sabitlərini işə salmaq mümkün olmuşdur:

Beispiel #5 Statik dəyişənləri işə salmaq üçün heredocdan istifadə edin

// Statik dəyişənlər
functionfoo()
{
statik $bar =<<Burada heç nə yoxdur...
etiket;
}

// Sinif sabitləri/xassələr
sinif foo
{
const BAR =<<Sabitdən istifadə nümunəsi
FOObar;

İctimai $base =<<Sahə istifadəsi nümunəsi
FOObar;
}
?>

PHP 5.3.0-dan etibarən, Heredoc identifikatorunu ikiqat dırnaq işarəsi ilə əhatə etmək də mümkündür:

İndidoc

Nowdoc tək dırnaqlı sətirlər üçün olduğu kimi, heredoc iki dırnaqlı sətirlər üçün də eynidir. Nowdoc heredoka bənzəyir, lakin onun daxilində heç bir əvəzetmə aparılmır. Bu konstruksiya ondan qaçmadan PHP kodunu və ya digər böyük mətn bloklarını daxil etmək üçün idealdır. Bu, SGML konstruksiyasına bir qədər bənzəyir. emal edilməsi nəzərdə tutulmayan mətn blokunu elan etməklə.

Nowdoc eyni ardıcıllıqla göstərilir <<< , heredocda istifadə olunur, lakin ondan sonra gələn identifikator tək dırnaqlar içərisindədir, məsələn, <<<"EOT" . Heredoc identifikatorlarına tətbiq edilən bütün şərtlər, xüsusən də bağlanış identifikatoruna tətbiq olunanlar nowdoc-a da aiddir.

Beispiel #7 indidoc nümunəsi

əks-səda<<<"EOD"
mətn nümunəsi,
çoxlu xətti əhatə edir
nowdoc sintaksisindən istifadə edir. Əks kəsiklər həmişə sözün həqiqi mənasında işlənir,
məsələn, \\ və \".
EOD;

Bu nümunəni işlətməyin nəticəsi:

Nowdoc sintaksisindən istifadə edərək çoxlu sətirləri əhatə edən mətn nümunəsi. Əks kəsiklər həmişə \\ və \" kimi hərfi mənada işlənir.

Nümunə №8 Dəyişənlərlə sitat gətirən Nowdoc sətri

/* Dəyişənlərlə daha mürəkkəb nümunə. */
sinif foo
{
ictimai $foo ;
ictimai $bar ;

Funksiya __construct()
{
$this -> foo = "foo" ;
$this -> bar = array("Bar1" , "Bar2", "Bar3" );
}
}

$foo = newfoo();
$name = "Ad" ;

əks-səda<<<"EOT"
Mənim adım "$name"dir. Mən $foo->foo yazıram.
İndi yazıram ($foo->bar).
Bu, böyük "A" verməməlidir: \x41
Haqqımızda Şirkətin Adı: EOT;
?>

Bu nümunəni işlətməyin nəticəsi:

Mənim adım "$name"dir. Mən $foo->foo yazıram. İndi yazıram ($foo->bar). Bu, böyük "A" verməməlidir: \x41

Nümunə №9 Statik məlumat nümunəsi

sinif foo(
ictimai $bar =<<<"EOT"
bar
Haqqımızda Şirkətin Adı: EOT;
}
?>

Şərh:

nowdoc dəstəyi PHP 5.3.0-da əlavə edildi.

Dəyişənlərin işlənməsi

Əgər sətir qoşa dırnaqlarda və ya heredoc ilə göstərilibsə, onun daxilindəki dəyişənlər işlənir.

Sintaksis iki növdür: sadə və mürəkkəb. Sadə sintaksis daha asan və daha rahatdır. Bu, dəyişəni, massiv dəyərini emal etməyə imkan verir ( massiv) və ya obyekt xassələri ( obyekt) minimum səylə.

Mürəkkəb sintaksis ifadəni əhatə edən mötərizələrlə müəyyən edilə bilər.

Sadə sintaksis

Tərcüməçi dollar işarəsi ilə qarşılaşarsa ( $ ), düzgün dəyişən adını yaratmaq üçün mümkün qədər çox simvol çəkir. Əgər adın sonunu təyin etmək istəyirsinizsə, dəyişən adını əyri mötərizələrə daxil edin.

$juice = "alma" ;

echo "O, bir az şirəsi içdi." . PHP_EOL ;

// Səhv. "s" dəyişən adı üçün etibarlı simvoldur, lakin dəyişənin adı $juice-dir.
echo "O, $juices-dən hazırlanmış şirə içdi." ;

// Düzgün. Dəyişən adının sonu mötərizədə ciddi şəkildə müəyyən edilir:
echo "O, $( şirə ) s-dən hazırlanmış şirə içdi." ;
?>

Bu nümunəni işlətməyin nəticəsi:

Bir az alma suyu içdi. Hazırlanmış şirə içdi. O, almadan bir az şirə içdi.

Massivin elementi ( massiv) və ya obyekt mülkiyyəti ( obyekt). Massiv indekslərində bağlanan kvadrat mötərizə ( ] ) indeks tərifinin sonunu göstərir. Eyni qaydalar sadə dəyişənlər üçün olduğu kimi obyekt xassələrinə də aiddir.

Nümunə №10 Sadə sintaksis nümunəsi

müəyyən ("KOOLAID", "koolaid1");
$juices = massiv("alma" , "narıncı", "koolaid1" => "bənövşəyi" );

echo "O, bəzi $şirələr [ 0 ] şirəsi içdi." . PHP_EOL ;
echo "O, bir az şirələr [ 1 ] şirəsi içdi." . PHP_EOL ;
echo "O, bəzi $şirələr [ koolaid1 ] şirəsi içdi." . PHP_EOL ;

sinif adamlari(
ictimai $john = "John Smith" ;
ictimai $jane = "Jane Smith" ;
ictimai $robert = "Robert Paulsen" ;

İctimai $smith = "Smith" ;
}

$insanlar = yeni insanlar();

echo " $insan -> John bəzi $şirələr [ 0 ] suyu içdi." . PHP_EOL ;
echo " $insan -> john sonra $insanlara salam dedi -> jane ." . PHP_EOL ;
echo " $insan -> john "in arvadı salam verdi $insan -> robert." . PHP_EOL ;
echo " $insan -> robert iki $insan -> smiths salamladı." ; // işləməyəcək
?>

Bu nümunəni işlətməyin nəticəsi:

Bir az alma suyu içdi. Bir az portağal suyu içdi. Bir az bənövşəyi suyu içdi. Con Smit bir az alma suyu içdi. Con Smit daha sonra Jane Smithə salam dedi. John Smith-in həyat yoldaşı Robert Paulseni salamladı.Robert Paulsen ikisini salamladı.

PHP 7.1.0 əlavə dəstək mənfi rəqəmli indekslər.

Nümunə №11 Mənfi ədədi indekslər

$string = "string" ;
əks-səda "-2 indeksindəki xarakterdir$string [- 2 ] ." , PHP_EOL ;
$string [- 3 ] = "o" ;
əks-səda "-3 mövqeyində simvolu "o" vəziyyətinə dəyişdirmək aşağıdakı sətri yaradır:$string ." , PHP_EOL ;
?>

Bu nümunəni işlətməyin nəticəsi:

-2 indeksli simvol n-dir. -3 mövqeyində simvolu "o" olaraq dəyişdirmək aşağıdakı sətiri yaradır: güclü

Daha mürəkkəb bir şey üçün mürəkkəb sintaksisdən istifadə edin.

Mürəkkəb (buruq) sintaksis

O, çətin başa düşüldüyü üçün deyil, mürəkkəb ifadələrdən istifadə etməyə imkan verdiyi üçün mürəkkəb adlanır.

Sətirlə əlaqələndirilmiş hər hansı skalyar dəyişən, massiv elementi və ya obyekt xassəsi bu sintaksislə sətirdə təmsil oluna bilər. Sadəcə ifadəni sətirdən kənarda yazdığınız kimi yazın və sonra onu daxil edin { } . Çünki { qaçmaq mümkün deyil, bu sintaksis yalnız o zaman tanınacaq $ birbaşa sonra izləyir { . istifadə edin {\$ çap etmək {$ . Bir neçə illüstrativ nümunə:

// Bütün səhvləri göstərin
error_reporting(E_ALL);

$böyük = "böyük" ;

// İşləmir, çıxır: Bu (əla)
echo "Bu ($böyük )" ;

// İşlər, çıxışlar: Bu əladır
echo "Bu ($ əla)" ;

// Əsərlər
əks-səda “Bu meydan genişdir( $square -> en ) 00 santimetr." ;

// İşləyir, sitat gətirilən düymələr yalnız buruq mötərizə sintaksisi ilə işləyir
echo "Bu işləyir: ( $arr [ "açar" ]) " ;

// Əsərlər
echo "Bu işləyir: ( $arr [ 4 ][ 3 ]) " ;

// Bu, $foo-nun kənarda olması ilə eyni səbəbdən yanlışdır
// xətlər. Başqa sözlə, hələ də işləyəcək
// lakin PHP ilk olaraq foo sabitini axtardığı üçün bu zəng edəcək
// E_NOTICE səviyyə xətası (müəyyən edilməmiş sabit).
əks-səda “Doğru deyil:( $arr [ foo ][ 3 ]) " ;

// Əsərlər. İçəridə çoxölçülü massivlərdən istifadə edərkən
// sətirlər həmişə əyri mötərizələrdən istifadə edir
echo "Bu işləyir: ( $arr [ "foo" ][ 3 ]) " ;

// Əsərlər.
echo "Bu işləyir: " . $arr [ "foo" ][ 3 ];

əks-səda "Bu da işləyir:( $obj -> dəyərlər [ 3 ] -> ad ) " ;

əks-səda "Bu, adlandırılan dəyişənin dəyəridir$adı : ($( $adı )) " ;

əks-səda "Bu, getName() funksiyası tərəfindən qaytarılan dəyişənin adı ilə dəyəridir:($( getName ())) ";

əks-səda "Bu, \$object->getName() tərəfindən qaytarılan ada görə dəyişənin dəyəridir:($( $object -> getName ())) " ;

// İşləmir, nəticə verir: getName() funksiyasının qaytardığı budur: (getName())
əks-səda "getName() funksiyasının qaytardığı budur: (getName())";
?>

Bu sintaksisdən istifadə edərək sətirlər daxilində obyekt xassələrinə daxil olmaq da mümkündür.

sinif foo(
var $bar = "Mən baram." ;
}

$foo = newfoo();
$bar = "bar" ;
$baz = massiv("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo ->( $baz [ 1 ])) \n" ;
?>

Bu nümunəni işlətməyin nəticəsi:

mən baram. mən baram.

Şərh:

Funksiyalar, metod çağırışları, statik sinif dəyişənləri və sinif sabitləri daxili işləyir {$} , PHP versiyası 5-dən bəri. Bununla belə, göstərilən dəyər təyin olunduğu sətirlə eyni kontekstdə dəyişən adı kimi qəbul ediləcək. Tək qıvrımlı mötərizələrdən istifadə ( {} ) funksiyaların, metodların, sinif sabitlərinin və ya statik sinif dəyişənlərinin dəyərlərinə daxil olmaq üçün işləməyəcək.

// Bütün səhvləri göstərin
error_reporting(E_ALL);

sinif pivələri (
const softdrink = "kök pivəsi" ;
ictimai statik $ale = "ipa" ;
}

$rootbeer = "A & W" ;
$ipa = "Alexander Keith\"s" ;

// Bu işləyir, nəticə verir: A & W istərdim
echo "Mən istəyirəm ($( pivə :: sərinləşdirici içki )) \n" ;

// Bu da işləyir, çıxır: Alexander Keith'i istərdim
echo "Mən istəyirəm ($( pivə :: $ale )) \n" ;
?>

Sətirdəki simvola daxil olmaq və onu dəyişdirmək

Sətirdəki simvollar sətirdən sonra kvadrat mötərizədə sıfırdan başlayaraq onların ofsetini sətirin əvvəlindən təyin etməklə istifadə edilə və dəyişdirilə bilər, məsələn, $str . Bu məqsəd üçün bir simli simvollar massivi kimi düşünün. 1-dən çox simvol almaq və ya əvəz etmək lazımdırsa, funksiyalardan istifadə edə bilərsiniz substr()substr_replace().

Şərh: PHP 7.1.0-dan bəri mənfi ofset dəyərləri dəstəklənir. Onlar xəttin sonundan ofset təyin edirlər. Əvvəllər mənfi ofsetlər səviyyə xətasına səbəb olurdu E_BİLDİRİŞ oxuduqda (boş sətir qaytarılır) və ya E_XƏBƏRDARLIQ yazmaqda (sətri dəyişməz olaraq).

Şərh: Sətirdəki simvola $str(42) kimi əyri mötərizələrdən istifadə etməklə də daxil olmaq olar.

Diqqət

Sətirdən kənar ofsete yazmağa cəhd etmək, sətri həmin ofsete qədər boşluqlarla dolduracaq. Tam olmayan növlər tam ədədlərə çevriləcək. Səhv ofset növü səviyyə xətasına səbəb olacaq E_XƏBƏRDARLIQ. Təyin edilmiş sətirin yalnız birinci simvolu istifadə olunur. PHP 7.1.0-dan etibarən boş sətir təyin etmək ölümcül xətaya səbəb olacaq. Əvvəllər bu halda null bayt (NULL) təyin edilirdi.

Diqqət

PHP-də sətirlər baytların daxili massivləridir. Nəticədə, ofset yolu ilə sətirə daxil olmaq və ya dəyişdirmək çoxbayt təhlükəsiz deyil və yalnız ISO-8859-1 kimi bir baytlıq kodlaşdırmada sətirlərlə həyata keçirilməlidir.

Şərh: PHP 7.1.0-dan bəri boş indeksdən istifadə ölümcül xətaya səbəb olur, əvvəllər belə halda sətir xəbərdarlıq edilmədən massivə çevrilirdi.

Nümunə №12 Bir neçə misal sətir

// Sətirin birinci simvolunu alın
$str = "Bu bir sınaqdır." ;
$first = $str [ 0 ];

// Sətirin üçüncü simvolunu alın
$third = $str [ 2 ];

// Sətirin son simvolunu alın
$str = "Bu hələ bir sınaqdır." ;
$last = $str [ strlen($str )- 1 ];

// Sətirin sonuncu simvolunu dəyişdirin
$str = "Dənizə baxın" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

PHP 5.4-dən etibarən sətirdəki ofset ya tam ədəd, ya da ədədləri ehtiva edən sətir olmalıdır, əks halda xəbərdarlıq ediləcək. Əvvəllər, kimi bir simli tərəfindən verilən ofset "foo", xəbərdarlıq edilmədən çevrildi 0 .

Nümunə №13 PHP 5.3 və PHP 5.4 arasındakı fərqlər

$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str[ "1.0" ]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str[ "1x" ]);
var_dump (isset($str [ "1x" ]));
?>

Bu nümunəni PHP 5.3-də işlətməyin nəticəsi:

string(1) "b" bool(true) string(1) "b" bool(true) string(1) "a" bool(true) string(1) "b" bool(true)

Bu nümunəni PHP 5.4-də işlətməyin nəticəsi:

string(1) "b" bool(true) Xəbərdarlıq: /tmp/t.php-də qeyri-qanuni sətir ofset "1.0" 7-ci sətirdə string(1) "b" bool(false) Xəbərdarlıq: / daxilində qeyri-qanuni sətir ofset "x" tmp/t.php 9-cu sətirdə string(1) "a" bool(false) string(1) "b" bool(false)

Şərh:

Digər növ dəyişənlərə (müəyyən interfeysləri həyata keçirən massivlər və ya obyektlər istisna olmaqla) daxil olmaq cəhdi və ya {} səssizcə qayıt SIFIR.

Şərh:

PHP 5.5 sintaksisdən istifadə edərək sətir literallarında simvollara daxil olmaq üçün dəstək əlavə etdi və ya {} .

Sətirləri dəyişdirmək üçün çoxlu faydalı funksiyalar var.

Əsas funksiyalar sətir funksiyaları bölməsində təsvir edilmişdir və təkmil axtarış və dəyişdirmə üçün Perl-ə uyğun müntəzəm ifadə funksiyaları.

Sətirə çevirin

Dəyər cast istifadə edərək sətirə çevrilə bilər (simli), və ya funksiyalar strval(). Sətirə ehtiyac duyulan ifadələrdə çevrilmə avtomatik olaraq baş verir. Bu, funksiyalardan istifadə edərkən baş verir əks-səda və ya çap edin, və ya dəyişənin dəyəri sətirlə müqayisə edildikdə. Təlimatın Növlər və Tip Manipulyasiyası bölmələrini oxumaq aşağıdakıları daha aydınlaşdıracaq. həmçinin bax settype().

Massivlər həmişə sətirə çevrilir "massiv", buna görə də serialın məzmununu göstərə bilməzsiniz ( massiv) istifadə edir əks-səda və ya çap edin nə ehtiva etdiyini görmək üçün. Fərdi elementə baxmaq üçün kimi bir şey istifadə edin echo $arr["foo"]. Bütün məzmunu necə göstərmək/baxmaq barədə məsləhətlər üçün aşağıya baxın.

Tip dəyişənini çevirmək üçün "Obyekt" növə görə simli sehrli üsul __toString istifadə olunur.

Məna SIFIR həmişə boş sətirə çevrilir.

Yuxarıda gördüyünüz kimi massivlərin, obyektlərin və ya resursların birbaşa stringizasiyası onların növlərindən başqa dəyərlərin özləri haqqında heç bir faydalı məlumat vermir. Sazlama üçün dəyərlər çıxarmağın daha uyğun bir yolu funksiyalardan istifadə etməkdir çap_r()var_dump().

PHP-də əksər dəyərlər daimi saxlama üçün sətirə çevrilə bilər. Bu üsul serializasiya adlanır və funksiya ilə edilə bilər serialize().

Sətirlərin rəqəmlərə çevrilməsi

Əgər sətir ədədi qiymət kimi tanınırsa, nəticədə yaranan qiymət və tip aşağıdakı kimi müəyyən edilir.

Sətirdə ".", "e" və ya "E" simvollarından heç biri yoxdursa və ədədin dəyəri tam ədədlər (müəyyən edilmiş) diapazonuna uyğun gəlirsə PHP_INT_MAX), sətir tam ədəd kimi tanınacaq ( tam). Bütün digər hallarda bu, üzən nöqtə sayı hesab olunur ( sal).

Dəyər sətirin başlanğıc hissəsi ilə müəyyən edilir. Sətir etibarlı rəqəmli dəyərlə başlayırsa, həmin dəyər istifadə olunacaq. Əks halda, dəyər 0 (sıfır) olacaq. Etibarlı rəqəmli dəyər bir və ya daha çox rəqəmdir (onluq nöqtə ola bilər), isteğe bağlı olaraq əvvəl işarə, ardınca isə əlavə eksponentdir. Eksponent "e" və ya "E" və ardınca bir və ya daha çox rəqəmdir.

$foo = 1 + "10,5" ; // $foo floatdır (11.5)
$foo = 1 + "-1.3e3" ; // $foo floatdır (-1299)
$foo = 1 + "bob-1.3e3" ; // $foo tam ədəddir (1)
$foo = 1 + "bob3" ; // $foo tam ədəddir (1)
$foo = 1 + "10 Kiçik Donuz" ; // $foo tam ədəddir (11)
$foo = 4 + "10.2 Kiçik Donuzlar" ; // $foo floatdır (14.2)
$foo = "10,0 donuz" + 1 ; // $foo floatdır (11)
$foo = "10,0 donuz" + 1,0 ; // $foo floatdır (11)
?>

Bu çevrilmə haqqında ətraflı məlumat üçün Unix sənədlərinin strtod(3) bölməsinə baxın.

Bu bölmədəki nümunələrdən hər hansı birini sınamaq istəyirsinizsə, nə baş verdiyini görmək üçün onu və aşağıdakı sətri kopyalayıb yapışdırın:

echo "\$foo== $foo; yazın: " . gettype ($foo). "
\n" ;
?>

Simvol kodunu tam ədədə çevirməklə əldə etməyi gözləməyin (məsələn, C-də olduğu kimi). Simvolları ASCII kodlarına və əksinə çevirmək üçün funksiyalardan istifadə edin ord()chr().

String Tipi İcra Təfərrüatları

7 il əvvəl

Sənədlərdə qeyd edilmir, lakin heredokun sonunda bağlanan nöqtəli vergül əslində real nöqtəli vergül kimi şərh edilir və bu səbəbdən bəzən sintaksis xətalarına səbəb olur.

$foo =<<a B C D
END;
?>

Bu deyil:

foo(<<a B C D
END;
);
// sintaksis xətası, gözlənilməz ";"
?>

Nöqtəli vergül olmadan yaxşı işləyir:

foo(<<a B C D
SON
);
?>

3 il əvvəl

Siz char massivi kimi sətirdən istifadə edə bilərsiniz (C kimi)

$a = "String massivi testi";

var_dump($a);
// Sətiri qaytarın(17) "String massivi testi"

var_dump($a);
// Sətiri qaytarın (1) "S"

// -- Massiv cast ilə --
var_dump((massiv)$a);
// Massivi (1) qaytarın ( => string(17) "String massivi testi")

var_dump((massiv)$a);
// Sətiri qaytarın (17) "S"

Norihiori

1 il əvvəl

$ (yəni, dəyişən) ilə başlayan hər hansı bir ifadə, nə qədər mürəkkəb olursa olsun, iki dırnaqlı sətirdə () daxil edilə bilər:

Echo "İfadə ( $h -> q ()[ "x)" ]-> p (9 == 0 ? 17 : 42 )) eynilə təhlil edilir ". $h -> q ()[ "x)" ]-> p (9 == 0 ? 17 : 42 ) . "edir." ;

?>

2 il bundan əvvəl

İkisi də işləməlidir :(

Sinif Testi (
ictimai statik $VAR = "statik" ;
public const VAR = "const" ;

ictimai funksiya sayHelloStatic()(
echo "salam: ( $this :: $VAR ) " ;
}

ictimai funksiya sayHelloConst()(
echo "salam: ( $this ::VAR) " ; //Parse xətası: sintaksis xətası, gözlənilməz ")", "[" gözlənilir
}
}

$obj = yeni sınaq();
$obj -> sayHelloStatic();
$obj -> deyinHelloConst ();

14 il əvvəl

Həm obyekt xassələrinin, həm də obyekt metodlarının dəyərini sətir daxilində qoymaq üçün mürəkkəb sintaksisdən istifadə edə bilərsiniz. Misal üçün...
siniftest{
ictimai
bir dollar= 1 ;
ictimai funksiya
iki() {
qayıtmaq
2 ;
}
}
$test= yenitest();
əks-səda
"foo{ $test-> bir} bar{ $test-> iki()} " ;
?>
"foo 1 bar 2" çıxacaq.

Bununla belə, ad məkanınızdakı bütün dəyərlər üçün bunu edə bilməzsiniz. Sinif sabitləri və statik xassələr/metodlar işləməyəcək, çünki mürəkkəb sintaksis "$" axtarır.
siniftest{
const
BİR= 1 ;
}
əks-səda
"foo (Test :: BİR) bar";
?>
Bu, "foo (Test::bir) bar" çıxacaq. Sabitlər və statik xassələr sətri parçalamağı tələb edir.

6 il əvvəl

Sətirlərdə aparıcı sıfırlar (ən az sürpriz) səkkizlik kimi qəbul edilmir.
Nəzərə alın:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x $x, y $y"; //"x 123, y 83" çap edir
başqa sözlə:
* mənbə kodundakı ədədi hərflərdə baş sıfırlar "səkkizlik" kimi şərh olunur, c.f. strtol ().
* sətirlərdə aparıcı sıfırlar (məsələn, istifadəçi tərəfindən təqdim edilən məlumatlar), tam ədədə (dolaylı və ya açıq şəkildə) məhəl qoyulmadıqda və onluq sayı hesab edildikdə, c.f. strtod().

3 il əvvəl

Ehtiyatlı olun ki, "Sətrin rəqəmlərə çevrilməsi" ilə uyğundur:

əgər ("123abc"== 123 ) əks-səda"(intstr == int) səhv olaraq doğru olaraq yoxlayır.";

// Bir tərəfi ədəd olduğu üçün sətir səhv olaraq intstr-dən int-ə çevrilir, bu da test nömrəsinə uyğun gəlir.

// if və switch ifadələri kimi bütün şərtlər üçün doğrudur (ehtimal ki, while dövrələri də)!

// Bu, istifadəçi daxiletməsini sınaqdan keçirərkən/istifadə edərkən/saxlayarkən, yalnız tam ədədi gözləyərkən və sınaqdan keçirərkən böyük təhlükəsizlik riski ola bilər.

// Görünür, yeganə düzəliş 123-ün "123" kimi sətir olmasıdır, buna görə də heç bir çevrilmə baş vermir.

?>

10 il əvvəl

Budur, ikiqat dırnaqlı sətirlərə və heredoklara sabitlər və digər funksiya çağırışları daxil olmaqla, əyri mötərizə sintaksisində ixtiyari ifadələr ehtiva etməyə imkan verən asan bir sındırma:

// Hack bəyannaməsi
funksiyası_ifadə($v) (qayıtmaq$v; }
$_ifadə= "_ifadə";

// Oyun meydançamız
müəyyənləşdirmək("qwe", "asd");
müəyyənləşdirmək("zxc", 5 );

$a= 3 ;
$b= 4 ;

funksiyası c($a, $b) (qayıtmaq$a+ $b; }

// İstifadə
əks-səda"əvvəl{ $_ifadə(1 + 2 )} post\n"; // "3 postdan əvvəl" çıxışı
əks-səda"əvvəl{ $_ifadə(qwe)} post\n"; // "pre asd post" çıxışı
əks-səda"əvvəl{ $_ifadə(c($a, $b)+ zxc* 2 )} post\n"; // "17-dən əvvəlki yazı"nı verir

// Ümumi sintaksis ($_expr(...))
?>

11 il əvvəl

Fikrinizi saxlamaq üçün tarixlərlə bağlı əvvəlki şərhləri oxumayın;)

Hər iki sətir rəqəmlərə çevrilə bildikdə (("$a" > "$b") testində) nəticələnən rəqəmlər istifadə olunur, əks halda FULL sətirlər simvol-xarakterlə müqayisə edilir:

var_dump("1.22" > "01.23" ); // bool(yanlış)
var_dump("1.22.00" > "01.23.00" ); // bool(doğru)
var_dump("1-22-00" > "01-23-00" ); // bool(doğru)
var_dump((sal)"1.22.00" > (üzən)"01.23.00" ); // bool(yanlış)
?>

2 il bundan əvvəl

Düşünürəm ki, bu şərhi əlavə etmək faydalı olardı ki, məlumat heç olmasa PHP saytında düzgün səhifədə görünsün.

Nəzərə alın ki, assosiativ açarla iki dırnaqlı sətirdən istifadə etmək niyyətindəsinizsə, T_ENCAPSED_AND_WHITESPACE xətası ilə qarşılaşa bilərsiniz. Bəziləri bunu daha az aşkar səhv mesajlarından biri hesab edirlər.

Belə bir ifadə:

$ meyvə=massiv(
"a"=> "alma",
"b"=> banan,
// və s
);

çap edin "Bu$ meyvə[ "a"]"; // T_ENCAPSED_AND_WHITESPACE
?>

mütləq parçalanacaq.

Bunu aşağıdakı kimi həll edə bilərsiniz:

çap edin"Bu$ meyvə[ a] " ; // açarı dırnaqdan çıxarın
çap edin"Bu${ meyvələr[ "a"]} " ; // Kompleks Sintaksis
çap edin"Bu{ $ meyvə[ "a"]} " ; // Kompleks Sintaksis variasiyası
?>

Son variasiyaya şəxsi üstünlük verirəm, çünki bu, daha təbii və sətirdən kənar ifadənin necə olacağına daha yaxındır.

PHP-nin ifadənin içindəki tək sitatı niyə səhv şərh etdiyi (ən azı mənə) aydın deyil, lakin mən təsəvvür edirəm ki, bunun sitatların dəyər sətirinin bir hissəsi olmadığı faktı ilə əlaqəsi var - sətir artıq təhlil edildikdən sonra sitatlar sadəcə olaraq mane olmaq...?

Sadə sintaksis

Tərcüməçi dollar işarəsi ($) ilə qarşılaşarsa, etibarlı dəyişən adı yaratmaq üçün mümkün qədər çox simvol çəkir. Əgər adın sonunu təyin etmək istəyirsinizsə, dəyişən adını əyri mötərizələrə daxil edin.

$pivə = "Heineken" ;
echo "$pivənin dadı əladır" ; // işləyir, """ dəyişən adı üçün etibarsız simvoldur
echo "O, bir az pivə içdi" ; // işləmir, "s" dəyişən adı üçün etibarlı simvoldur
echo "O, bir neçə dollar (pivə) içdi" ; // işləyir
echo "O, bir az ($pivə) içdi" ; // işləyir
?>

Eynilə, massiv elementi emal edilə bilər ( massiv) və ya obyekt mülkiyyəti ( obyekt). Massiv indekslərində bağlanan kvadrat mötərizə ( ] ) indeks tərifinin sonunu göstərir. Eyni qaydalar sadə dəyişənlərə olduğu kimi obyekt xassələrinə də tətbiq edilir, baxmayaraq ki, onlar üçün dəyişənlər kimi hiylə yoxdur.

// Bu misallar xüsusi olaraq massivlərin daxili istifadəsinə aiddir
// xətlər. Xarici simlər, həmişə simli düymələri əhatə edin
// dırnaq içərisində massiv və sətirlərdən (mötərizədə) kənarda istifadə etməyin.

// Bütün səhvləri göstərək
error_reporting(E_ALL);

$fruits = array("çiyələk" => "qırmızı" , "banan" => "sarı" );

// İşləyir, lakin qeyd edək ki, o, sitat gətirilən sətirdən kənarda fərqli işləyir
əks-səda "Bir banan $ meyvədir.";

//İşlər
əks-səda "Bir banan ($fruits["banana"]).";

// İşləyir, lakin aşağıda təsvir olunduğu kimi PHP əvvəlcə axtarır
// daimi banan.
əks-səda "Bir banan ($fruits).";

// İşləmir, əyri mötərizələrdən istifadə edin. Bu, emal xətasına səbəb olacaq.
əks-səda "Bir banan $fruits["banana"]dır.";

// Əsərlər
əks-səda "Bir banandır". $fruits [ "banan" ] . "." ;

// Əsərlər
əks-səda "Bu kvadrat $square->eni metr genişdir.";

// İşləmir. Həll üçün mürəkkəb sintaksisə baxın.
əks-səda "Bu kvadrat $square->width00 santimetr genişlikdədir.";
?>

Daha mürəkkəb tapşırıqlar üçün mürəkkəb sintaksisdən istifadə edə bilərsiniz.

Mürəkkəb (buruq) sintaksis

Bu sintaksis çətin başa düşüldüyünə görə deyil, mürəkkəb ifadələrdən istifadə etməyə imkan verdiyinə görə mürəkkəb adlanır.

Əslində, siz bu sintaksislə sətirə istənilən ad boşluğu dəyəri daxil edə bilərsiniz. Siz sadəcə olaraq ifadəni sətirdən kənarda yazdığınız kimi yazın və sonra onu ( və ) içərisinə sarın. Siz "("" işarəsindən qaça bilməyəcəyiniz üçün bu sintaksis yalnız $ dərhal sonra gələndə tanınacaq (. ("($") göstərmək üçün "(\$" və ya "\($" istifadə edin). Bəzi nümunəvi nümunələr:

// Bütün səhvləri göstərək
error_reporting(E_ALL);

$böyük = "fantastik" ;

// İşləmir, nəticə verir: Bu (fantastik)
echo "Bu ($ əla)" ;

// Əsərlər, çıxışlar: Bu fantastikdir
echo "Bu ($ əla)" ;
echo "Bu $(əla)" ;

// Əsərlər
əks-səda "Bu kvadratın eni ($square->en)00 santimetrdir.";

// Əsərlər
əks-səda "Bu işləyir: ($arr)";

// Bu, $foo-nun kənarda səhv olması ilə eyni səbəbdən yanlışdır
// xətlər. Başqa sözlə, hələ də işləyəcək
// lakin PHP ilk olaraq foo sabitini axtardığı üçün bu zəng edəcək
// E_NOTICE səviyyə xətası (müəyyən edilməmiş sabit).
əks-səda "Bu səhvdir: ($arr)";

// Əsərlər. Çoxölçülü massivlərdən istifadə edərkən, içəridə
// sətirlər həmişə əyri mötərizələrdən istifadə edir
əks-səda "Bu işləyir: ($arr["foo"])";

// Əsərlər.
echo "Bu işləyir: " . $arr [ "foo" ][ 3 ];

əks-səda "Siz hətta yaza bilərsiniz ($obj->dəyərlər->ad)";

əks-səda "Bu, $name adlı dəyişənin qiymətidir: ($($name))";
?>

Sətirdəki simvollar sətirdən sonra əyri mötərizələrdə sıfırdan başlayaraq onların ofsetini sətirin əvvəlindən təyin etməklə istifadə edilə və dəyişdirilə bilər. Budur bəzi nümunələr:

// Sətirin birinci simvolunu alın
$str = "Bu bir sınaqdır." ;
$first = $str ( 0 );

// Sətirin üçüncü simvolunu alın
$third = $str ( 2 );

// Sətirin son simvolunu alın
$str = "Hələ bir sınaqdır.";
$last = $str ( strlen ($str ) - 1 );

// Sətirin sonuncu simvolunu dəyişdirin
$str = "Dənizə bax";
$str ( strlen ($str )- 1 ) = "i" ;

?>

Sətir funksiyaları və operatorlar

Simli operatorlar

Fərqli proqramlaşdırma dilləri müxtəlif sətir birləşmə (birlik) operatorlarından istifadə edir. Məsələn, Paskal "+" operatorundan istifadə edir. PHP-də sətirlərin birləşdirilməsi üçün “+” operatorundan istifadə edilməsi düzgün deyil: əgər sətirlərdə ədədlər varsa, o zaman sətirləri birləşdirmək əvəzinə, iki ədədin toplanması əməliyyatı yerinə yetiriləcək.

PHP-də birləşməni yerinə yetirən iki operator var.

Birincisi, sol və sağ arqumentlərin birləşməsini qaytaran birləşdirici operatordur (".").

İkincisi, sağ arqumenti sol arqumentə əlavə edən birləşdirici təyin operatorudur.

Konkret bir misal götürək:

$a = "salam" ;
$b = $a. "Dünya!" ; // $b sətirində "Salam Dünya!" - Bu birləşmədir

$a = "salam" ;
$a .= "Dünya!" ; // $a sətri "Salam Dünya!" - Bu, birləşmə ilə bir tapşırıqdır
?>

Simli Müqayisə Operatorları

== və != müqayisə operatorları sətirlərin müqayisəsi üçün tövsiyə edilmir, çünki onlar növün dəyişdirilməsini tələb edir. Misal:

$ x = 0;
$ y = 1;
əgər ($x == "" ) əks-səda verir "

x - boş sətir

" ;
if($y=="") əks-səda verir "

y - boş sətir

"
;
// Nəticələr:
// x - boş sətir
?>

Bu skript bizə $x-ın boş bir sətir olduğunu bildirir. Bunun səbəbi, boş sətir ("") əvvəlcə 0, sonra isə "boş" kimi qəbul edilməsidir. PHP-də operandlar yalnız hər iki sətir olduqda sətir kimi müqayisə edilir. Əks halda, onlar rəqəmlər kimi müqayisə edilir. Bu halda, PHP-nin nömrəyə çevirə bilmədiyi hər hansı sətir (boş sətir daxil olmaqla) 0 kimi qəbul ediləcək.

Simli müqayisə nümunələri:

$ x = "String" ;
$y = "String" ;
$z = "Xətt" ;
əgər ($x == $z ) əks-səda verir "

X cərgəsi Z cərgəsinə bərabərdir

" ;
əgər ($ x == $ y ) əks-səda verir "

X cərgəsi Y sətirinə bərabərdir

"
;
əgər ($ x != $ z ) əks-səda verir "

X sətri Z sətrinə bərabər DEYİL

"
;
// Nəticələr:
// X sətri Y sətrinə bərabərdir

?>

Çaşqınlığın və tip çevrilməsinin qarşısını almaq üçün sətirləri müqayisə edərkən ekvivalent operatordan istifadə etmək tövsiyə olunur. Ekvivalent operatoru həmişə sətirləri düzgün müqayisə etməyə imkan verir, çünki o, dəyərləri həm dəyər, həm də növə görə müqayisə edir:

$ x = "String" ;
$y = "String" ;
$z = "Xətt" ;
əgər ($x === $z ) əks-səda verir "

X cərgəsi Z cərgəsinə bərabərdir

" ;
əgər ($ x === $ y ) əks-səda verir "

X cərgəsi Y sətirinə bərabərdir

"
;
əgər ($ x !== $ z ) əks-səda verir "

X sətri Z sətrinə bərabər DEYİL

"
;
// Nəticələr:
// X sətri Y sətrinə bərabərdir
// X sətri Z sətrinə bərabər DEYİL
?>

Keçən yazıda PHP-də şərti operator sintaksisinə baxdıq. Bu yazı operator mötərizələrinə diqqət yetirəcəkdir. Onlarla daim qarşılaşacaqsınız. Bu, hər hansı bir proqramlaşdırma dilinin əsas anlayışıdır.

Operator mötərizələrinin nə olduğu sualına Vikipediya cavab verməyə kömək edəcək:

Operator mötərizələri- bütövlükdə, bir əmr kimi qəbul edilən proqramlaşdırma dilində əmrlər blokunu təyin edən mötərizələr və ya əmrlər.

Paskalda operator mötərizələri konstruksiya ilə işarələnir başla... son. C-yə bənzər dillərdə (o cümlədən PHP), operator mötərizələri simvollardan istifadə etməklə təsvir edilir {…} .

Bunlar. başqa sözlə, mötərizə içərisində olan çoxlu əmrlər 1 əmr kimi qəbul edilir.

PHP-də şərtlərlə bağlı məqalədə bir nümunə var idi:

$b) ( echo "A dəyişəni B-dən böyükdür"; ) else ( "B dəyişəni A-dan böyükdür"; ) ?>

Bu nümunədə operator mötərizələri 2 dəfə istifadə olunur. Onlar operatorları çərçivəyə salırlar

  • əks-səda“A dəyişəni B-dən böyükdür”;
  • əks-səda“B dəyişəni A-dan böyükdür”;

Bu nümunədə yalnız 1 ifadə mötərizə içərisindədir, ona görə də bu belə yazmağa bərabərdir:

$b) əks-səda "A dəyişəni B-dən böyükdür"; else echo "Dəyişən B A-dan böyükdür"; ?>

Sintaksis:

Əgər (şərt) ifadə 1; başqa ifadə 2;

Tutaq ki, şərt yerinə yetirilmədikdə başqa bir sətir göstərilməsini istəyirik. Dəyişənlərimizin dəyərlərini də dəyişdiririk ki, indi $a idi > $b. Kodumuzu dəyişdirək:

$b) əks-səda "A dəyişəni B-dən böyükdür."; else echo "B dəyişəni A-dan böyükdür."; echo "Bəli..bəli A əslində B-dən azdır. "; ?>

İcra edirik ... Ekranda nə görürük:

A dəyişəni B-dən böyükdür. Bəli.. bəli A əslində B-dən kiçikdir.

Burada bir yerdə səhv var. Təxmin etdiyiniz kimi, bütün məsələ ondan ibarətdir ki, şərtimiz doğru olduğundan (a > b) kod yerinə yetirilir:

Echo "A dəyişəni B-dən böyükdür.";

Filialda başqa yalnız 1 ifadəmiz var:

Echo "Dəyişən B A-dan böyükdür.";

Şərtdən asılı olmayaraq aşağıdakı ifadə icra olunacaq. Bunun kimi:

$b) əks-səda "A dəyişəni B-dən böyükdür."; else echo "B dəyişəni A-dan böyükdür."; echo "Bəli..bəli A əslində B-dən azdır. "; ?>

İndi operator mötərizələrindən istifadə edirik və budaqda 2 ifadəni birləşdiririk başqa:

$b) ( echo "Dəyişən A B-dən böyükdür. "; ) else ( echo "Dəyişən B A-dan böyükdür."; echo "Bəli.. bəli A əslində B-dən kiçikdir. "; ) ?>

Kod daha aydın oldu. İndi PHP başa düşür ki, ($a > $b) şərti yerinə yetirilmədikdə, 2 sətir göstərilməlidir. Və şərt doğrudursa - yalnız bir.

Mənim sən böyüksən məsləhət- bir neçə ifadəni 1 blokda birləşdirməyə ehtiyac olmasa belə, həmişə bəyanat mötərizələrindən istifadə edin. Fakt budur ki:

  • kod bu şəkildə daha yaxşı görünür. Koda tez nəzər salsaq, hərf və rəqəmlərdən ibarət salatı deyil, onun fərdi bloklarını görürük.
  • köhnə kodu tez-tez dəyişdirmək lazımdır. Əgər operator mötərizəniz yox idisə və siz (bizim vəziyyətimizdə olduğu kimi) bəzi kod əlavə etmisinizsə, proqramın məntiqi səhv olacaq. Ola bilsin ki, siz bunu dərhal hiss etməyəsiniz.

Simli interpolyasiya üçün. Təlimatdan:

Mürəkkəb (buruq) sintaksis

Sintaksis mürəkkəb olduğundan və buna görə də mürəkkəb ifadələrə imkan verdiyi üçün mürəkkəb adlandırılmır.

İstənilən skalyar dəyişən, massiv elementi və ya sətir təsviri olan obyekt xassələri bu sintaksis vasitəsilə daxil edilə bilər. Sadəcə ifadəni sətirdən kənarda olduğu kimi yazın və sonra ( və ) içərisinə sarın. Çünki ( qaçmaq mümkün deyil, bu sintaksis yalnız $ aşağıdakı zaman tanınacaq ( . hərfi almaq üçün (\$) istifadə edin ($ . Bunu aydınlaşdırmaq üçün bəzi nümunələr:

eni)00 santimetr genişdir."; // İşləyir, sitat gətirilən düymələr yalnız əyri mötərizə sintaksisi ilə işləyir echo "Bu işləyir: ($arr["key"])"; // İşin əks-sədası "Bu işləyir: ($arr)" ; // Bu, $foo-nun sətirdən kənarda səhv olması ilə eyni səbəbdən yanlışdır. // Başqa sözlə, o, yenə də işləyəcək, ancaq ona görə ki, PHP əvvəlcə // foo adlı sabiti axtarır; E_NOTICE səviyyəli xəta ( qeyri-müəyyən sabit) // atılacaq. echo "Bu səhvdir: ($arr)"; // İşləyir. Çoxölçülü massivlərdən istifadə edərkən həmişə massivlərin ətrafında mötərizələrdən istifadə edin // sətirlərin içərisində olduqda echo "Bu işləyir: ($) arr["foo"])"; // İşləyir. echo "Bu işləyir: " . $arr["foo"]; echo "Bu da işləyir: ($obj->values->name)"; echo "Bu $name adlı varın dəyəri: ($($name))"; echo "Bu, getName() qaytarılması dəyəri ilə adlandırılan varın dəyəridir: ($(getName()))"; echo "Bu \$object->getName() qayıdış dəyəri ilə adlandırılan varın dəyəridir: ($($object->getName()))"; // İşləmir, çıxışlar: Bu qaytarılan dəyərdir getName(): (getName()) e cho "Bu getName() funksiyasının qaytarılması dəyəridir: (getName())"; ?>

Çox vaxt bu sintaksis lazım deyil. Məsələn, bu:

$a = "abcd"; $out = "$a $a"; // "abcd abcd";

tam olaraq belə davranır:

$out = "($a) ($a)"; // eyni

Beləliklə, buruq mötərizələrə ehtiyac yoxdur. Amma bu:

$out = "$aefgh";

səhv səviyyənizdən asılı olaraq ya uğursuz olacaq, ya da səhv yaradacaq, çünki $aefgh adlı dəyişən yoxdur, ona görə də bunu etməlisiniz:

$out = "$(a)efgh"; // və ya $out = "($a)efgh";