Buruq mötərizələrdə dəyişən php. PHP Operatorları. Sətirlərin rəqəmlərə çevrilməsi




Salam əziz proqramçılar. Təşkil edən elementləri öyrənməyə davam edək.

Bu yazıda php operatorlarının nə olduğunu öyrənəcəyik. Əslində, onların bəziləri ilə az qala uşaqlıqdan tanış olmuşuq, lakin biz onları ancaq işarə kimi tanıyırıq (+, -, =, !, ?).

php-də onların hamısı operator adlanır, bu olduqca məntiqlidir, çünki onlar müəyyən bir hərəkəti və ya əməliyyatı yerinə yetirirlər.

Hətta deyə bilərsiniz ki, hərf və ya rəqəm olmayan bütün çap edilə bilən simvollar PHP-də operatorlardır. Ancaq bu, hamısı deyil, çünki hərflərdən ibarət operatorlar var.

Sıra ilə başlayaq.

Arifmetik operatorlar

Ədədlər üzərində əməliyyatlar yerinə yetirmək üçün arifmetik operatorlardan istifadə olunur.

+ əlavə operatorudur;
— — çıxma operatoru;
/ - bölmə operatoru;
* — vurma operatoru;
% bölgü zamanı qalığın alınması operatorudur;
++ — bir artırmaq üçün operator (artırma);
— — — bir operatorla azalma (azalma)

Yazarkən adətən operatordan əvvəl və sonra boşluq qoyulur. Bu, yalnız kodu oxumağın asanlığı üçün edilir, baxmayaraq ki, bu boşluq heç bir şeyə təsir etmir və istəsəniz, onsuz da edə bilərsiniz.

Mürəkkəb ifadələr hesabda qəbul olunmuş qaydalara uyğun tərtib edilir, yəni vurma və bölmə toplama və çıxma əməllərindən üstündür və hər ikisi ifadədə olduqda, sonuncular mötərizə içərisindədir.

əks-səda (6 + 7 ) * (7 + 8 ); // 195
?>

Tam ədədin tam ədədə bölünməsi hərəkətini yerinə yetirərkən, qalıq alındıqda, nəticə avtomatik olaraq həqiqi ədədə (üzən nöqtə nömrəsi) çevrilir.

əks-səda 8/3; //2.6666666666
?>

Kəsr ədəd üçün çap edilmiş rəqəmlərin sayı php.ini faylında olan dəqiqlik direktivində təyin edilmiş dəyərdən asılıdır. Adətən bu, dövrü saymayan 12 simvoldur.

Bir ədədin digərinə qalıqsız bölünüb və ya bölünmədiyini müəyyən etmək üçün adətən % operatorundan istifadə olunur.

əks-səda 53328 % 4 ; //0
?>

Artırma və azalma istisna olmaqla hesab operatorları ilə əməliyyatlar çağırılır ikili, çünki onlar iki operand (term + termin, dividend / bölən və s.)

Artırma və azaltma hərəkətləri deyilir unar, çünki onlar bir operand ehtiva edirlər. Daha varmı şərti əməliyyat, bu üç operanddan ibarətdir.

Artırma (++) və azalma (- -) operatorları yalnız dəyişənlərə aiddir.

Dəyişən tipli tam ədəd (tam ədədlər)

$növbəti = 3 ;
echo +$növbəti; // 4
?>

Dəyişən tipli sətir

$next = "abc";
echo $next; // abd
?>

Əlifbada növbəti olduğu üçün "c" hərfi yerinə "d" hərfi çap olunur və dəyişənin qiymətini bir artırdıq.

Nümunələr artımla hərəkətləri göstərir və eyni şəkildə siz azalma ilə hərəkətlər edə bilərsiniz.

Bitwise operatorları

Bitwise operatorları binar verilənlərlə işləmək üçün nəzərdə tutulmuşdur. Əgər kimsə bunun nə olduğunu bilmirsə, izah edəcəm. İkili ədədlər 1001000011100000111000 kimi ədədlərdir.

Bu cür məlumatlar, demək olar ki, veb-saytların hazırlanmasında istifadə edilmədiyi üçün biz bu barədə ətraflı danışmayacağıq. Mən sizə onların necə göründüyünü göstərəcəyəm ki, belə simvollarla qarşılaşdığınız zaman nə ilə məşğul olduğunuzu təsəvvür edə biləsiniz.

& - bit üzrə əlaqə AND (və);
~ — bit üzrə inkar (yox);
| — bit üzrə birləşmə OR (və ya);
^ — bitwise aradan qaldırılması OR (xor);
<< — сдвиг влево битового значения операнда;
>> — operandın bit qiymətini sağa sürüşdürmək;

Çox güman ki, bu operatorlarla qarşılaşacaqsınız, çünki ikili verilənlər kompüter qrafikası proqramlarının hazırlanmasında geniş istifadə olunur. Amma onları öyrənmək üçün kiməsə lazım olarsa, başqa resurs üzrə ayrıca kurs keçməli olacaqlar.

Müqayisə operatorları

Müqayisə operatorları məntiqi operatorlardır və dəyişənləri müqayisə etmək üçün istifadə olunur. Massivləri və obyektləri onlardan istifadə etməklə müqayisə etmək olmaz.

> - operatordan böyük;
=> - operatordan böyük və ya bərabər;
< — оператор меньше;
<= — оператор меньше или равно;
== — bərabərlik operatoru;
!= — bərabərsizlik operatoru;
=== — ekvivalent operator (dəyişənin qiyməti və növü bərabərdir);
!== — qeyri-ekvivalentlik operatoru;

Müqayisə nəticəsində ya ekranda doğruya (doğru) uyğun gələn biri, ya da yalana (yanlış) uyğun gələn boş sətir göstərilir.

əks-səda 1 > 0; // 1
əks-səda 1< 0 ; // пустая строка
əks-səda 1 => 0 ; // 1
əks-səda 1 == 1; // 1
?>

Beləliklə, müqayisə operatorları demək olar ki, heç vaxt istifadə edilmir. Onların əsas məqsədi if ifadəsi ilə birlikdə işləməkdir.

Şərti ifadələr if, else, elseif.

Şərti operatorlar belə adlanır, çünki onlar müəyyən bir hərəkətin yerinə yetirilməsindən asılı olaraq müəyyən bir şərti yoxlamaq üçün nəzərdə tutulmuşdur.

if ifadəsi arqument kimi boolean dəyişənini və ya ifadəsini qəbul edir. Şərt doğrudursa, nəticə göstərilir, doğru deyilsə, boş sətir göstərilir.



əgər ($növbəti< $nexT)
{
echo "Yağış ehtimalı"; // Çıxış Yağıntısı mümkündür
}
?>

$next = "Havanın rütubəti 80%";
$nextT = "Havanın rütubəti 90%";
əgər ($növbəti > $növbəti)
{
echo "Yağış ehtimalı"; // Boş sətir çap edin
}
?>

Əgər proqram iki hərəkəti təyin etməlidirsə, onlardan biri dəyər doğru olduqda yerinə yetiriləcək, digəri isə yanlışdırsa, if ifadəsi ilə birlikdə else ifadəsi istifadə olunur.

$next = "Havanın rütubəti 80%";
$nextT = "Havanın rütubəti 90%";
əgər ($növbəti > $növbəti)
{
echo "Yağış ehtimalı";
}
başqa
{
echo "Yağış gözlənilmir";
}
?>

Bu halda “Yağış gözlənilmir” yazısı görünəcək və ifadədə “Daha çox” işarəsini “Az” olaraq dəyişsəniz, “Yağış mümkündür” yazısı görünəcək. Şərti operatorlar şərti belə yoxlayır və ona uyğun düzgün nəticə çıxarır.

Çox vaxt ikidən çox şərt qoymağa ehtiyac var və sonra onları ardıcıl yoxlamaq üçün elseif operatorundan istifadə olunur.



əgər ($növbəti > $növbəti)
{
əks-səda "Görürəm";
}
başqa if ($növbəti<= $nexT)
{
əks-səda "Qar";
}
elseif ($növbəti >= $növbəti)
{
əks-səda "Yağış";
}
elseif ($növbəti == $növbəti)
{
echo "Quraqlıq";
}
başqa
{
echo "Yağış ehtimalı";
}
?>

Bu proqramda "Qar" çıxışı olacaq. Şərtlərdən heç biri uyğun gəlmirsə, "Yağış ehtimalı" göstərilir.

if ifadəsində istədiyiniz qədər elseif bloku ola bilər, ancaq başqa bir ifadə.

Alternativ qeyd seçiminə icazə verilir - buruq mötərizələr olmadan. Bu halda if, else, elseif ifadələrinin sətirləri iki nöqtə ilə, bütün konstruksiya isə (operator) endif açar sözü ilə bitir.

$next = "Havanın rütubəti 50%";
$nextT = "Havanın rütubəti 60%";
əgər ($növbəti<= $nexT):

əks-səda "Qar";

elseif ($növbəti >= $növbəti):

əks-səda "Yağış";

elseif ($növbəti == $növbəti):

echo "Quraqlıq";

başqa:

echo "Yağış ehtimalı";
endif ;
?>

Məntiqi operatorlar

Məntiqi operatorlar bit operatorlarına bənzəyirlər. Onların arasındakı fərq ondan ibarətdir ki, birincilər məntiqi dəyişənlərlə, ikincisi isə rəqəmlərlə işləyir.

Məntiqi operatorlar bir neçə şərti birləşdirmək lazım olduğu hallarda istifadə olunur ki, bu da if ifadələrinin sayını azaldacaq, bu da öz növbəsində kodda səhvlərin baş vermə ehtimalını azaldır.

&& - bağlayıcı AND;
və - həmçinin AND, lakin daha aşağı prioritetlə;
|| - ayırıcı bağlayıcı OR;
və ya - həmçinin OR, lakin daha aşağı prioritetlə;
xor - eksklüziv OR;
! - inkar;

Aşağı prioritet o deməkdir ki, hər iki operator varsa, daha yüksək prioritet olan birinci icra olunur.

Gələcəkdə daha mürəkkəb skriptlərin nümunələrindən istifadə edərək, məntiqi operatorlar üzərində daha ətraflı dayanacağıq.

Təyinat operatoru

Təyinat operatoru = sağ operandın qiymətini sol operanda təyin edir.

$next = "Salam"
əks-səda "Salam" // Salam
?>

Operator nöqtəsi

Nöqtə operatoru ədədin tam hissəsini kəsir hissəsindən ayırır və bir neçə sətir və ədədi bir tam sətirdə birləşdirir.

$növbəti = 22 ;
əks-səda "Bu gün sonra" .$növbəti. "şaxta gözlənilir"; // Bu gün 22-dən sonra şaxta gözlənilir
?>

Mötərizələr operatoru

Riyaziyyatda olduğu kimi, mötərizə operatoru onların daxilindəki hərəkətə üstünlük verir.

Mötərizədə verilmiş məlumatlar əvvəlcə yerinə yetirilir, sonra isə bütün qalanlar.

Buruq mötərizə operatoru

PHP-də qıvrım mötərizələri yerləşdirməyin üç yolu və hətta üslubu var.

1. BSD üslubu - mötərizələr sola düzülür.

əgər ($növbəti)
{

}

2. GNU üslubu - mötərizələr sol kənardan girintili şəkildə düzülür

əgər ($növbəti)
{
echo “Salam əziz başlanğıc proqramçılar”;
}

3. K&R stili - operator xəttində mötərizə açılır

əgər ($növbəti)(
echo “Salam əziz başlanğıc proqramçılar”;
}

Əvvəldən üslublardan birini seçməlisiniz və gələcəkdə skriptlər yazarkən yalnız ondan istifadə edin. Üstəlik, hansı üsluba üstünlük verdiyinizin heç bir əhəmiyyəti yoxdur. Proqram boyu onun vahid olması vacibdir.

Məncə, hələlik bu kifayətdir. Prinsipcə, yalnız işarələr deyil, həm də funksiyalar və digər elementlər operator ola bilər, ona görə də onların hamısını sadalamaq çox çətindir və bunun mənası yoxdur.

Əsas əsaslar haqqında təsəvvürə sahib olmaq kifayətdir. Qalanlarını isə praktiki nümunələrdən istifadə edərək təhlil edəcəyik.

İrlandiyalı Şeremetyevo hava limanında göz yaşları içində dolaşır. İşçilərdən biri rəğbət bəsləmək qərarına gəldi:
- Vətən üçün darıxırsan?
- Dəyməz. Sadəcə bütün baqajımı itirmişəm
- Bu necə ola bilərdi?
- Özümü başa düşmürəm. Deyəsən fişini düzgün bağladım

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

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

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

Siz print_r($GLOBALS) istifadə edərək $GLOBALS massiv dəyişənlərinin bütün dəyərlərini göstərə bilərsiniz; və ya bu kimi:

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

$_SERVER dəyişəni.

    $_REQUEST dəyişəni- 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ından istifadə edərək 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şdirilə bilərdi. Onların mövcudluğu və məlumatların müvafiq massivlərə əlavə edilmə sırası variables_order direktivi ilə müəyyən edilir (GPCS standart olaraq təyin edilir).

    $_SESSION dəyişəni

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

    $http_response_header dəyişəni

Son yazıda PHP-də şərti ifadənin sintaksisinə baxdıq. Bu qeyddə operator mötərizələri haqqında danışacağıq. Onlarla daim qarşılaşacaqsınız. Bu, hər hansı bir proqramlaşdırma dilinin əsas anlayışıdır.

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

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

Paskal operator mötərizələrini işarələmək üçün aşağıdakı konstruksiyadan istifadə edir: 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ə, operator mötərizəsinə daxil edilmiş bir neçə əmr 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. 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 misalda mötərizədə yalnız 1 ifadə var, 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ə ekranda başqa sətir göstərmək istəyirik. Gəlin dəyişənlərimizin dəyərlərini də dəyişdirək 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 kiçikdir."; ?>

Gəlin bunu edək... 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.";

İplikdə 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 kiçikdir."; ?>

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

$b) ( echo "A dəyişəni 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ə yetirilmirsə, 2 sətir çap etmək lazımdır. Və şərt doğrudursa - yalnız bir.

Mənim sizin üçün böyük məsləhət– bir neçə operatoru 1 blokda birləşdirməyə ehtiyac olmasa belə, həmişə operator mötərizələrindən istifadə edin. Fakt budur ki:

  • Kodu bu şəkildə oxumaq daha asandır. Koda cəld nəzər salsaq, hərf və rəqəmlərdən ibarət vinaigrette deyil, onun fərdi bloklarını görürük.
  • Tez-tez köhnə kodda dəyişikliklər edilməlidir. Ə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 yazdığınız kimi yazın və sonra onu ( və ) içərisinə sarın. ( qaçmaq mümkün olmadığı üçün 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()) echo "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 işləməyəcək, 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";

Şərh: 64 bitlik platformalarda PHP 7.0.0-da xətt uzunluğuna dair əldə edilə bilən məhdudiyyətlər yoxdur, 32 bitlik sistemlərdə və PHP-nin əvvəlki versiyalarında xətlə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

Bir sətri 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 ( \\ ). Əks xəttin bütün digər istifadələri normal simvollar kimi şərh ediləcək: 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 "Siz həmçinin sətirlərə daxil edə bilərsiniz
bu kimi yeni sətir simvolu,
Bu yaxşıdır"
;

// Nəticələr: Arnold bir dəfə dedi: "Mən qayıdacağam"
əks-səda "Bir gün Arnold dedi: "Mən qayıdacağam.";

Echo "C:\\*.* silmisiniz?";

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

// Nəticələr: Bu genişləndirilməyəcək: \n yeni sətir
əks-səda "Bu genişləndirilməyəcək: \n yeni sətir";

// Nəticələr: $expand və $either dəyişənləri genişləndirilmir
əks-səda "$expand və $hər iki dəyişən genişləndirilməyib";
?>

İ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:

Escape Sequences
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 notationda simvolun müntəzəm ifadəsinə uyğun gələn simvolların 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ü çıxaracaq. PHP 5.1.1-dən əvvəl tərs xətlə işarələyin \($var) nəşr olunmayıb.

Heredok

Sətirləri təyin etməyin üçüncü yolu heredoc sintaksisindən istifadə etməkdir: <<< . Bu operatordan sonra siz identifikator, sonra xətt lentini göstərməlisiniz. Bundan sonra xəttin özü gəlir, sonra isə eyni identifikator, əlavəni bağlayır.

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

Diqqət

Qeyd etmək çox vacibdir ki, bağlanan identifikator sətirində nöqtəli vergüldən başqa heç bir simvol olmamalıdır ( ; ). Bu o deməkdir ki, id 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. Yeni sətir də bağlanan identifikatordan dərhal sonra başlamalıdır.

Bu qayda pozularsa və bağlanan identifikator "təmiz" deyilsə, bağlanan identifikator itkin hesab olunur və PHP onu daha da axtarmağa davam edəcək. Əgər bu halda düzgün bağlama identifikatoru heç vaxt tapılmazsa, bu, skriptin sonundakı sətir nömrəsi ilə təhlil xətasına səbəb olacaq.

Nümunə №1 Yanlış sintaksis nümunəsi

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

Nümunə №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 başlayaraq, bu məhdudiyyət yalnız dəyişənləri ehtiva edən heredoklara aiddir.

Heredoc mətni ikiqat dırnaq içərisində olan sətir kimi davranır, onlar olmadan. Bu o deməkdir ki, heredoc-da 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 işlənir, lakin heredoc daxilində kompleks dəyişənlərdən istifadə edərkən sətirlərlə işləyərkən olduğu kimi diqqətli olmaq lazımdır.

Nümunə №3 Heredoc simli tərif nümunəsi

$str =<<Nümunə xətti,
bir neçə xətti əhatə edən,
Heredoc sintaksisindən istifadə edir.
EOD;

Sinif foo
{
var $foo ;
var $bar ;

Function__construct()
{
$this -> foo = "Foo" ;
$bu ->
}
}

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

əks-səda<<Mənim adım "$name"dir. Mən $foo -> foo yazıram .
İndi mən nəticə çı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. Foo yazıram. İndi Bar2 çıxarıram. Bu, böyük "A" hərfi ilə çıxmalı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 etibarən 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:

Nümunə №5 Statik dəyişənləri işə salmaq üçün heredocdan istifadə

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

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

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

PHP 5.3.0-dan etibarən siz Heredoc identifikatorunu ikiqat dırnaq işarələri ilə əhatə edə bilərsiniz:

İ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 dizayn 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 <<< , heredoc-da istifadə olunur, lakin aşağıdakı 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.

Nümunə 7 Nowdoc istifadə nümunəsi

əks-səda<<<"EOD"
Məsələn mətn,
bir neçə 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 ;

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

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

əks-səda<<<"EOT"
Mənim adım "$name"dir. Mən $foo->foo çap edirəm.
İndi çap edirəm ($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 çap edirəm. İndi çap edirəm ($foo->bar). Bu, böyük "A" verməməlidir: \x41

Nümunə №9 Statik verilənlərdən istifadə 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 idarə edilməsi

Əgər sətir qoşa dırnaq içərisində göstərilibsə və ya heredoc istifadə edilərsə, 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 ( $ ), 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.

$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şən $juice adlanır.
echo "O, $şirələrdən hazırlanmış şirə içdi." ;

// Düzgün. Dəyişən adının sonu mötərizədə ciddi şəkildə göstərilir:
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.

massiv elementi ( massiv) və ya obyekt mülkiyyəti ( obyekt). Massiv indekslərində bağlanan kvadrat mötərizə var ( ] ) 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 edin ("KOOLAID" , "koolaid1" );
$juices = massiv("alma" , "portağal" , "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 adamları (
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 ] şirəsi 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ədədi indekslər.

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

$string = "string" ;
əks-səda "-2 indeksindəki simvol bərabərdir$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-ə bərabərdir. -3 mövqeyində simvolu "o" olaraq dəyişdirmək aşağıdakı sətri verir: 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 sintaksisdən istifadə edərək sətirdə təmsil oluna bilər. Sadəcə ifadəni sətirdən kənarda yazdığınız kimi yazın və sonra içəri sarın { } . Çünki { qaçmaq mümkün deyil, bu sintaksis yalnız o zaman tanınacaq $ birbaşa izləyir { . istifadə edin {\$ çap etmək {$ . Bir neçə illüstrativ nümunə:

// Bütün səhvləri göstərin
xəta_hesabatı(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 ( $böyük ) " ;

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

// İşləyir, sitat gətirilən açar sözlər yalnız əyri 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 xaricində olduğu kimi eyni səbəbdən etibarsızdır
// xətlər. Başqa sözlə, hələ də işləyəcək,
// lakin PHP ilk olaraq foo sabitini axtardığından bu səbəb olacaq
// səviyyə xətası E_NOTICE (müəyyən edilməmiş sabit).
əks-səda “Doğru deyil:( $arr [ foo ][ 3 ]) " ;

// Əsərlər. Çoxölçülü massivləri daxili 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ının qaytardığı dəyişən adının dəyəridir:($( getName ())) " ;

əks-səda "Bu, \$object->getName() funksiyasının qaytardığı 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 = yeni foo();
$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 5-dən başlayaraq. Bununla belə, verilən dəyər müəyyən edildiyi 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
xəta_hesabatı(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ışlar: Alexander Keith's istəyirəm
echo "Mən istəyirəm ($( pivə :: $ale )) \n" ;
?>

Sətirdəki simvola daxil olmaq və 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 göstərmə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 etibarən mənfi ofset dəyərləri dəstəklənir. Onlar xəttin sonundan ofseti təyin edirlər. Əvvəllər mənfi ofsetlər səviyyə xətasına səbəb olurdu E_BİLDİRİŞ oxundu (boş sətirin qaytarılması) və ya E_XƏBƏRDARLIQ yazarkən (sətir dəyişmədən).

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

Diqqət

Xəttin hüdudlarından kənarda ofsetə yazmağa cəhd etmək sətri həmin ofsetə 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 sıfır bayt (NULL) təyin edilmişdi.

Diqqət

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

Şərh: PHP 7.1.0 olduğundan, boş indeksdən istifadə ölümcül xətaya səbəb olur; əvvəllər bu halda sətir xəbərdarlıq edilmədən massivə çevrilirdi.

Nümunə №12 Bəzi misal sətirlə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 = "Bu hələ bir sınaqdır." ;
$last = $str [ strlen ($str ) - 1 ];

// Sətirin son 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 rəqəmləri ehtiva edən sətir kimi göstərilməlidir, əks halda xəbərdarlıq ediləcək. Əvvəllər kimi bir sətir tərəfindən verilmiş 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 olmağa çalışmaq və ya {} səssizcə qayıdacaq 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 tələb olunan 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əlimatdakı Növlər və Tip Manipulyasiya 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ə edərək əks-səda və ya çap edin nə ehtiva etdiyini görmək üçün. Tək 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" tipində simli __toString sehrli metodundan istifadə olunur.

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

Yuxarıda gördüyünüz kimi, massivləri, obyektləri və ya resursları birbaşa sətirə çevirmək, 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 yaxşı yolu funksiyalardan istifadə etməkdir çap_r()var_dump().

PHP-də əksər dəyərlər davamlı saxlama üçün sətirə çevrilə bilər. Bu üsul serializasiya adlanır və funksiyadan istifadə etməklə edilə bilər serialize().

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

Əgər sətir ədədi dəyər kimi tanınırsa, nəticədə yaranan qiymət və növ 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 düşürsə PHP_INT_MAX), sətir tam ədəd kimi tanınacaq ( tam). Bütün digər hallarda üzən nöqtə sayı hesab olunur ( sal).

Dəyər sətrin başlanğıcı 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 işarədən sonra isteğe bağlı 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ərində 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" ;
?>

Bir simvolun kodunu tam ədədə çevirməklə əldə edəcəyinizi gözləməyin (məsələn, C dilində olduğu kimi). Simvolları ASCII kodlarına və geriyə çevirmək üçün funksiyalardan istifadə edin ord()chr().

Sətir tipli icra 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 olunur 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" ;

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

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

$obj = yeni Test();
$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ə icazə vermək üçün asan bir müdaxilə:

// Hack bəyannaməsi
funksiyası_ifadə($v) (qayıt$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ıt$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ərdən istifadə edilir, ə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 et "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ə[ "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...?