Internet Windows Android
Kengaytiring

Php kotirovkalari, bitta kotirovkalar, ikkilangan tirnoqlar, qochish. PHP-da bitta va ikkilangan tirnoqlarning farqi nimada? PHP-dagi ikkita tirnoq

Satr - bu belgilar to'plami. PHP-da belgi bayt bilan bir xil, ya'ni aynan 256 xil belgi bo'lishi mumkin. Bu shuni anglatadiki, PHP-da mahalliy Unicode-ning "a. Ba'zi Unicode-ning qo'llab-quvvatlashi" mavjud emas, lekin utf8_encode () va utf8_decode () funktsiyalari mavjud.

Izoh: Agar satr juda katta bo'lsa, muammo bo'lmaydi. PHP tomonidan qo'llaniladigan torlar hajmiga amalda hech qanday cheklovlar yo'q, shuning uchun ularning uzunligi haqida tashvishlanish uchun mutlaqo sabab yo'q.

Sintaksis

    Ipni uch xil usul bilan aniqlash mumkin.

Yagona tirnoq

Ipni aniqlashning eng oson usuli - uni bitta tirnoq ichiga qo'shish ("belgi").

Bir qatorda bitta tirnoqni ishlatish uchun, boshqa ko'plab tillarda bo'lgani kabi, oldin teskari (\) belgisi qo'yilishi kerak, ya'ni qochib ketgan. Agar teskari chiziq bitta tirnoqdan oldin yoki satr oxirida kelsa, uni takrorlashingiz kerak. E'tibor bering, agar siz boshqa biron bir belgidan qochishga harakat qilsangiz, teskari chiziq ham bosilib chiqadi! Shunday qilib, orqa chiziqdan qochishning umuman hojati yo'q.

Eslatma: PHP 3-da, bu holda E_NOTICE darajasidagi xabar beriladi.

Izoh: Boshqa ikkita sintaksisdan farqli o'laroq, bitta tirnoqli satrlarda topilgan maxsus belgilar uchun o'zgaruvchilar va qochish ketma-ketliklari qayta ishlanmaydi.

Echo "bu oddiy mag'lubiyat"; echo "Shuningdek, siz yangi qatorlarni shu qatorga kiritishingiz mumkin, chunki bu yaxshi"; // Chiqish: Bir marta Arnold: "Men qaytib kelaman" deb takrorlaydi "Bir marta Arnold:" Men qaytib kelaman "" dedi; // Chiqish: Siz C: \ *. * Ni olib tashladingizmi? echo "Siz C: \\ *. * ni olib tashladingizmi?"; // Chiqish: Siz C: \ *. * Ni olib tashladingizmi? echo "Siz C: \ *. * ni olib tashladingizmi?"; // Chiqishlar: Bu quyidagilarni qo'shmaydi: \ n yangi qator echo "Bu qo'shilmaydi: \ n yangi qator"; // Chiqish: o'zgaruvchilar $ kengaytirilishi ham $ o'rnini bosuvchi aks emas "O'zgaruvchilar $ kengaytirilishi ham $ yoki almashtirilmaydi";

Ikki tirnoq

Agar mag'lubiyat ikki qavatli tirnoq (") bilan yozilgan bo'lsa, PHP maxsus belgilar uchun ko'proq ketma-ketlikni taniydi:

Jadval 11-1. Qochish ketma-ketliklari

Shunga qaramay, agar siz boshqa biron bir belgini mnemonize qilishni xohlasangiz, teskari chiziq ham chop etiladi!

Ammo ikkita tirnoqli satrlarning eng muhim xususiyati o'zgaruvchan ishlov berishdir. Qo'shimcha ma'lumot: mag'lubiyatga ishlov berish.

Heredok

Satrlarni aniqlashning yana bir usuli - bu heredoc sintaksisidan foydalanish ("

Yopish identifikatori qatorning birinchi ustunidan boshlanishi kerak. Bundan tashqari, identifikator PHP-dagi barcha boshqa teglar bilan bir xil nomlash qoidalariga amal qilishi kerak: faqat alfasayısal belgilar va pastki chiziqdan iborat bo'lishi kerak va raqamsiz yoki pastki chiziq bilan boshlanishi kerak.

Diqqat

Shuni ta'kidlash kerakki, yopilish identifikatori bo'lgan qatorda nuqta-vergul (;) bundan mustasno, boshqa belgilar mavjud emas. Bu shuni anglatadiki, identifikator ichkariga kirmasligi kerak va nuqta-verguldan oldin yoki keyin bo'sh joy yoki yorliq bo'lishi mumkin emas. Yopish identifikatoridan oldingi birinchi belgi sizning operatsion tizimingiz tomonidan aniqlangan yangi satrli belgi bo'lishi kerakligini tushunish ham muhimdir. Masalan, Macintosh-da u \ r.

Agar ushbu qoida buzilgan bo'lsa va yopilish identifikatori "toza" bo'lmasa, yopilish identifikatori yo'q deb hisoblanadi va PHP uni izlashni davom ettiradi. Agar bu holda, to'g'ri yopilish identifikatori hali ham topilmasa, unda bu skript oxirida satr raqami bilan ishlov berishda xatolikka olib keladi.

Heredoc matni ikkita tirnoqli mag'lubiyatga ega bo'lmagan holda ishlaydi. Bu shuni anglatadiki, siz heredoc-dagi tirnoqlardan qochishingizga hojat yo'q, lekin siz hali ham yuqoridagi qochish ketma-ketliklaridan foydalanishingiz mumkin. O'zgaruvchilar qayta ishlanadi, lekin heredoc ichida murakkab o'zgaruvchilardan foydalanganda, siz simlar bilan ishlashda bo'lgani kabi ehtiyot bo'lishingiz kerak.

11-2-misol. Heredoc simini aniqlashga misol

$ str =<<foo = "Foo"; $ this -> bar = array ("Bar1", "Bar2", "Bar3"); $ foo = yangi foo (); $ name = "MyName"; aks sado<<foo. Endi men chiqyapman ($ foo-> bar). Bunda "A" harfi katta bo'lishi kerak: \ x41 EOT;

Izoh: PHP 4-ga heredoc-ni qo'llab-quvvatlash qo'shildi.

O'zgaruvchan ishlov berish

Agar satr ikki tirnoqli yoki heredoc yordamida ko'rsatilgan bo'lsa, undagi o'zgaruvchilar qayta ishlanadi.

Sintaksisning ikki turi mavjud: sodda va murakkab. Oddiy sintaksis osonroq va qulayroq. Bu sizga o'zgaruvchini, massiv qiymatini yoki ob'ektning xususiyatini qayta ishlashga imkon beradi.

Murakkab sintaksis PHP 4 da joriy qilingan va uni ifoda atrofidagi jingalak qavslar orqali tanib olish mumkin.

Oddiy sintaksis

Agar tarjimon dollar belgisiga duch kelsa ($), u to'g'ri o'zgaruvchining nomini shakllantirish uchun iloji boricha ko'proq belgilarni ushlaydi. Agar siz ismning oxirini aniq belgilamoqchi bo'lsangiz, o'zgarmaydigan nomini jingalak qavs ichiga soling.

$ pivo = "Heineken"; echo "$ beer" ning ta'mi juda yaxshi "; // ishlaydi," "" o'zgaruvchisi nomi uchun yaroqli belgi emas "U bir necha $ pivo ichgan" echo; // ishlamaydi, "s" o'zgaruvchisi nomi uchun yaroqli belgi "u bir oz $ (pivo) s ichdi") echo; // works echo "U bir oz ($ pivo) ichdi"; // ishlaydi

Massiv elementi yoki ob'ekt xususiyati xuddi shu tarzda qayta ishlanishi mumkin. Massiv indekslarida yopiladigan kvadrat qavs (]) indeks ta'rifining oxirini belgilaydi. Ob'ekt xususiyatlari uchun oddiy o'zgaruvchilar bilan bir xil qoidalar qo'llaniladi, ammo ular bilan o'zgaruvchilar kabi hiyla yo'q.

// Ushbu misollar // qatorlar qatoridan foydalanish haqida. Satrlar tashqarisida har doim // qatoringizning satr kalitlarini tirnoq belgilariga qo'ying va tashqi satrlardan (qavslardan) foydalanmang. // Barcha xatolarni ko'rsataylik error_reporting (E_ALL); $ mevalar = massiv ("qulupnay" => "qizil", "banan" => "sariq"); // ishlaydi, lekin e'tibor bering, tirnoqlarning tashqarisida u boshqacha ishlaydi: "Banan - bu $ mevalar."; // "Banan - bu ($ mevalar [" banan "])" asarlari aks-sadosi. "; // ishlaydi, lekin PHP, quyida tasvirlanganidek, avval // banan konstantasini qidiradi. echo "Banan ($ mevalar)."; // Ishlamaydi, jingalak qavslardan foydalaning. Bu ishlov berishda xatolikka olib keladi. echo "Banan - bu $ mevalar [" banan "]."; "; // "Banan bu" asarlari aks-sadosi. $ mevalar ["banan"]. "."; // Works echo "Bu kvadrat $ square-> width metr width."; // Ishlamayapti. Yechish uchun murakkab sintaksisga qarang. echo "Bu kvadrat $ square-> width00 santimetr keng.";

Har qanday murakkab narsa uchun siz murakkab sintaksisdan foydalanishingiz kerak.

Murakkab (jingalak) sintaksis

Buni tushunish qiyin bo'lgani uchun emas, balki murakkab iboralardan foydalanishga imkon berganligi uchun qiyin deb atashadi.

Darhaqiqat, ushbu sintaksis yordamida qatorga har qanday nom oralig'idagi qiymatni kiritishingiz mumkin. Siz faqat ifodani off-line kabi yozasiz va keyin (va) ichiga o'ralasiz. Siz qochib qutula olmasligingiz sababli "(", bu sintaksis faqat $ darhol paydo bo'lganda tan olinadi (. ("(\" "Yoki" \ ($ "ni ko'rsatish uchun" ($ ") ni ishlating. Ba'zi misollar):

// Barcha xatolarni ko'rsataylik error_reporting (E_ALL); $ great = "fantastik"; // Ishlamaydi, displeylar: Bu (hayoliy) aks sado "Bu ($ great)"; // Ishlar, displeylar: Bu ajoyib echo "Bu ($ great)"; echo "Bu $ (great)"; // Works echo "Bu kvadrat ($ square-> width) 00 santimetrga teng."; // Works echo "Bu ishlaydi: ($ arr)"; // Bu $ foo // qatoridan tashqarida noto'g'ri bo'lgani uchun ham noto'g'ri. Boshqacha qilib aytganda, u hali ham ishlaydi, // lekin PHP avval doimiy o'zgaruvchini qidirganligi sababli, bu E_NOTICE darajadagi xatoni oshiradi (aniqlanmagan doimiy). echo "Bu noto'g'ri: ($ arr)"; // Asarlar. Ko'p o'lchovli massivlardan foydalanganda har doim // strings ichidagi jingalak qavslardan foydalaning "Bu ishlaydi: ($ arr [" foo "])"; // Asarlar. echo "Bu ishlaydi:". $ arr ["foo"]; echo "Siz hatto yozishingiz mumkin ($ obj-> values-> name)"; echo "Bu $ name deb nomlangan o'zgaruvchining qiymati: ($ ($ name))";

Satrdagi belgiga kirish va o'zgartirish

Iplardagi belgilarni satrning boshidan boshlab noldan boshlab, chiziqdan keyin jingalak qavs ichida belgilash orqali ishlatish va o'zgartirish mumkin.

Izoh: Orqaga moslik uchun siz hali ham xuddi shu maqsad uchun qator qavslaridan foydalanishingiz mumkin. Ammo, PHP 4 dan boshlab, ushbu sintaksis eskirgan.

11-3-misol. Bir nechta qator misollar

// Satrning birinchi belgisini oling $ str = "Bu sinov."; $ first = $ str (0); // satrning uchinchi belgisini oling $ third = $ str (2); // Satrning oxirgi belgisini oling $ str = "Bu hali ham sinov."; $ last = $ str (strlen ($ str) -1); // Satrning oxirgi belgisini o'zgartiring $ str = "Dengizga qarang"; $ str (strlen ($ str) -1) = "i";

Foydali funktsiyalar va operatorlar

"." Operatori yordamida satrlarni birlashtirish mumkin. (nuqta). E'tibor bering, "+" qo'shish operatori bu erda ishlamaydi. Qo'shimcha ma'lumot olish uchun String Operators mavzusiga qarang.

Satrlarni o'zgartirish uchun juda ko'p foydali funktsiyalar mavjud.

Asosiy funktsiyalar satr funktsiyalari, kengaytirilgan qidirish va almashtirish uchun muntazam ifodalash funktsiyalari bo'limida tavsiflangan (ikki qismdan iborat: Perl va POSIX kengaytirilgan).

URL satrlari uchun funktsiyalar va satrlarni shifrlash / parolini hal qilish funktsiyalari (mcrypt va mhash) mavjud.

Va nihoyat, agar siz hali ham izlagan narsangizni topa olmagan bo'lsangiz, unda belgi turi uchun funktsiyalarga ham qarang.

Ipga aylantirish

Siz (string) cast yoki strval () funktsiyasi yordamida qiymatni mag'lubiyatga aylantirishingiz mumkin. Ip kerak bo'lgan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi. Bu echo () yoki print () funktsiyalaridan foydalanganda yoki o'zgaruvchining qiymatini mag'lubiyat bilan taqqoslaganda sodir bo'ladi. Qo'llanmaning Turlar va Manipulyatsiya bo'limlari orqali o'qish quyidagilarni aniqroq qiladi. Shuningdek, settype () ga qarang.

"TRUE" mantiqiy qiymati "1" qatoriga aylantiriladi va FALSE qiymati "" (bo'sh satr) sifatida ifodalanadi. Shu tarzda siz qiymatlarni ikkala yo'nalishda ham o'zgartirishingiz mumkin - mantiqiy qatordan mag'lubiyatga va aksincha.

Butun son yoki suzuvchi uning raqamlaridan tashkil topgan raqam bilan ifodalangan qatorga aylantiriladi (shu jumladan, suzuvchi nuqta raqamlari ko'rsatkichi).

Massivlar har doim "Array" qatoriga aylantiriladi, shuning uchun uning tarkibini bilish uchun echo () yoki print () yordamida massiv tarkibini namoyish eta olmaysiz. Bitta elementni ko'rish uchun siz echo $ arr ["foo"] kabi bir narsa qilishingiz kerak. Barcha tarkibni qanday ko'rsatish / ko'rish bo'yicha maslahatlar uchun quyida ko'rib chiqing.

Ob'ektlar har doim "Ob'ekt" qatoriga aylantiriladi. Agar siz nosozliklarni tuzatish maqsadida ob'ektning a'zosi o'zgaruvchisining qiymatini ko'rsatmoqchi bo'lsangiz, quyidagi xatboshilarni o'qing. Agar kerakli ob'ektning sinf nomini olishni istasangiz, get_class () dan foydalaning.

Resurslar har doim "Resurs id # 1" tuzilmasi bilan satrlarga aylantiriladi, bu erda 1 PHP tomonidan ish vaqtida unga berilgan noyob resurs raqami. Agar siz manba turini olishni istasangiz, foydalaning.

NULL har doim bo'sh satrga aylantiriladi.

Yuqorida ko'rib turganingizdek, massivlarni, ob'ektlarni yoki manbalarni namoyish qilish sizga qiymatlarning o'zi haqida hech qanday foydali ma'lumot bermaydi. Nosozliklarni tuzatish uchun qiymatlarni chiqarishning qulay usuli bu print_r () va var_dump () funktsiyalaridan foydalanishdir.

Doimiy saqlash uchun PHP qiymatlarini satrlarga aylantirishingiz mumkin. Ushbu usul serializatsiya deb ataladi va serialize () funktsiyasi yordamida amalga oshirilishi mumkin. Bundan tashqari, agar sizning PHP o'rnatishingiz WDDX-ni qo'llab-quvvatlasa, siz PHP qiymatlarini XML tuzilmalariga seriyalashingiz mumkin.

Iplarni raqamlarga aylantirish

Agar mag'lubiyat raqamli qiymat sifatida tan olinsa, natijada qiymat va tur quyida ko'rsatilgandek aniqlanadi.

Agar mag'lubiyat ".", "E" yoki "E" belgilaridan birini o'z ichiga olgan bo'lsa, suzuvchi deb tan olinadi. Aks holda, u bir butun sifatida aniqlanadi.

Qiymat mag'lubiyat boshi bilan belgilanadi. Agar mag'lubiyat raqamli qiymatdan boshlasa, u qiymat ishlatiladi. Aks holda, qiymat 0 (nol) ga teng bo'ladi. Haqiqiy raqamli raqam - bu bir yoki bir nechta raqam (o'nlik nuqta bo'lishi mumkin), ixtiyoriy ravishda oldin belgi, keyin esa ixtiyoriy ko'rsatkich. Ko'rsatkich - bu "e" yoki "E", keyin bir yoki bir nechta raqamlar.

$ foo = 1 + "10.5"; // $ foo - bu float (11.5) $ foo = 1 + "-1.3e3"; // $ foo - bu float (-1299) $ foo = 1 + "bob-1.3e3"; // $ foo butun son (1) $ foo = 1 + "bob3"; // $ foo butun son (1) $ foo = 1 + "10 ta kichik cho'chqa"; // $ foo integer (11) $ foo = 4 + "10.2 Little Piggies"; // $ foo - bu float (14.2) $ foo = "10.0 cho'chqa" + 1; // $ foo bu float (11) $ foo = "10.0 cho'chqa" + 1.0; // $ foo suzuvchi (11)

Ushbu konversiya haqida ko'proq ma'lumot olish uchun Unix hujjatlarining strtod (3) bo'limiga qarang.

Agar siz ushbu bo'limdagi misollardan birini sinab ko'rishni istasangiz, nima bo'lishini ko'rish uchun uni va quyidagi qatorni nusxalashingiz va joylashtirishingiz mumkin:

Echo "\ $ foo == $ foo; type:". gettype ($ foo). "
\ n ";

Belgilar kodini tamsayıga aylantirish orqali olishni kutmang (masalan, C da qilishingiz mumkin). Belgilarni ularning kodlariga o'tkazish va aksincha, ord () va dan foydalaning

Men PHP dasturlash bo'yicha mutaxassis emasman, lekin nima uchun PHP-da ba'zi kodlarni bitta va ba'zida ikkita tirnoq bilan yozilgan qator bilan ko'rishim haqida bir oz tushunmayapman.

Men bilaman .NET yoki C da, agar u bitta tirnoqlarda bo'lsa, demak u bu satr emas, balki belgi.

Qaror

Siz nimani bilishingiz kerak

$ a = "ism"; $ b = "mening $ a"; == "mening ismim" $ c = "mening $ a"; ! = "mening ismim"

PHP-da odamlar bitta tirnoq yordamida "a", "my name", "abc xyz" kabi doimiy qatorni belgilaydilar, ikkilangan tirnoqlar yordamida "a $ b $ c $ d" kabi identifikatorni o'z ichiga olgan qatorni aniqladilar.

Va yana bir narsa

Echo "mening ismim";

nisbatan tezroq

Echo "mening ismim";

Echo "my". $ a;

nisbatan sekinroq

Echo "my $ a";

Bu ishlatilgan boshqa satrlar uchun amal qiladi.

PHP-da bitta tirnoqli matn satr qiymati sifatida qabul qilinadi va ikki marta keltirilgan matn o'zgaruvchilarni ularning qiymatini almashtirish va qayta ishlash orqali tahlil qiladi.

$ test = "o'zgaruvchan"; echo "Salom Mr $ test"; // chiqishi quyidagicha bo'ladi: Hello Mr o'zgaruvchisi echo "Hello Mr $ test"; // chiqishi quyidagicha bo'ladi: Salom Mr $ test

Bu erda ikkita tirnoq qiymatni tahlil qiladi va bitta tirnoq satr qiymati sifatida qabul qilinadi ($ test o'zgaruvchisini ajratmasdan).

Ichki belgilarning ikkala turi ham satrlardir. Iqtibosning boshqa turiga yakun yasash uchun bir turdagi kotirovkadan foydalanish qulay. "" ", shuningdek" "". Tirnoq belgilari turlarining eng katta farqi shundaki, ichki identifikatorlarga havolalar bitta tirnoq ichida emas, balki ikki tirnoq ichida almashtiriladi.

Izoh: PHP 7.0.0-da 64-bitli platformalarda mag'lubiyatning uzunligi chegarasi yo'q, 32-bitli tizimlarda va PHP-ning oldingi versiyalarida satrlar 2 GB dan (2147483647 bayt) kattaroq bo'lishi mumkin emas.

Sintaksis

Ipni to'rt xil usul bilan aniqlash mumkin:

  • bitta tirnoq
  • ikki tirnoq
  • nowdoc sintaksisi (PHP 5.3.0 dan beri)

Yagona tirnoq

Satrni aniqlashning eng oddiy usuli - uni bitta tirnoq ichiga qo'shish ( " ).

Ip ichidagi bitta tirnoqni ishlatish uchun uni teskari chiziq bilan olib qoching ( \ ). Agar teskari chiziqni o'zi yozishingiz kerak bo'lsa, uni takrorlang ( \\ ). Orqaga burishning boshqa barcha ishlatilishi odatdagi belgilar sifatida talqin qilinadi, ya'ni siz boshqa qochish ketma-ketliklaridan foydalanmoqchi bo'lsangiz \ r yoki \ n, ular har qanday maxsus xatti-harakat o'rniga ko'rsatiladi.

aks sado "bu oddiy mag'lubiyat";

aks sado "Shuningdek, siz qatorlarga kiritishingiz mumkin
shunga o'xshash yangi chiziq belgisi,
bu odatiy"
;

// Natija: Arnold bir marta "men qaytib kelaman" dedi
aks sado "Bir paytlar Arnold:" Men qaytib kelaman ";

Echo "Siz C: \\ *. * Ni olib tashladingizmi?";

// Chiqishlar: C: \ *. * Ni olib tashladingizmi?
echo "Siz C: \ *. * ni olib tashladingizmi?" ;

// Chiqishlar: bu kengaytirilmaydi: \ n yangi qator
aks sado "Bu kengaytirilmaydi: \ n yangi qator";

// Chiqish: o'zgaruvchilar $ kengaytirish shuningdek $ kengaytirilmagan
aks sado "O'zgaruvchilar $ kengaytirish ham $ yoki kengaytirilmaydi";
?>

Ikki tirnoq

Agar mag'lubiyat ikki qavatli tirnoq (") bilan yozilgan bo'lsa, PHP maxsus belgilar uchun quyidagi qochish ketma-ketligini tan oladi:

Qochish ketma-ketliklari
Tartib Qiymat
\ n yangi satr (ASCII da LF yoki 0x0A (10))
\ r aravani qaytarish (CR yoki 0x0D (13) ASCII da)
\ t gorizontal yorliq (ASCII da HT yoki 0x09 (9))
\ v vertikal yorliq (ASCII da VT yoki 0x0B (11)) (PHP 5.2.5 dan beri)
\ e qochish belgisi (ASCII da ESC yoki 0x1B (27)) (PHP 5.4.4 dan beri)
\ f sahifa tasmasi (ASCII da FF yoki 0x0C (12)) (PHP 5.2.5 dan beri)
\\ orqaga burish
\$ dollar belgisi
\" qo‘sh taklif
\{1,3} sakkiztalik oddiy ifodali belgiga mos keladigan, ketma-ket baytga sig'inish uchun jimgina toshib ketadigan belgilar ketma-ketligi (ya'ni "\ 400" === "\ 000")
\ x (1,2) o'n oltinchi raqamli yozuvdagi odatiy ifoda belgisiga mos keladigan belgilar ketma-ketligi
\ u (+) UTF-8 vakolatxonasida (PHP 7.0.0 da qo'shilgan) qatorga mos keladigan Unicode belgilar regexiga mos keladigan belgilar ketma-ketligi

Bitta tirnoq ichiga kiritilgan qatorda bo'lgani kabi, har qanday belgidan qochish ham qochish belgisini o'zi chiqaradi. PHP 5.1.1-ga qadar teskari chiziq \ ($ var) bosilmadi

Heredok

Satrlarni aniqlashning uchinchi usuli - bu heredoc sintaksisidan foydalanish: <<< ... Ushbu operatordan so'ng siz identifikatorni, so'ngra chiziqli lentani ko'rsatishingiz kerak. Shundan so'ng chiziqning o'zi, so'ngra qo'shimchani yopadigan bir xil identifikator keladi.

Chiziq kerak yopilish identifikatoridan boshlang, ya'ni. u satrning birinchi ustunida bo'lishi kerak. Bundan tashqari, identifikator PHP-dagi barcha boshqa teglar bilan bir xil nomlash qoidalariga amal qilishi kerak: faqat alfasayısal belgilar va pastki chiziqni o'z ichiga olishi va raqam bilan boshlanmasligi kerak (pastki chiziqlarga ruxsat beriladi).

Diqqat

Shuni ta'kidlash kerakki, yopilish identifikatori bo'lgan qatorda nuqta-verguldan tashqari boshqa belgilar bo'lmasligi kerak ( ; ). Bu shuni anglatadiki, identifikator girintili bo'lmasligi kerak va verguldan oldin yoki keyin bo'sh joy yoki yorliq bo'lishi mumkin emas. Yopish identifikatoridan oldingi birinchi belgi sizning operatsion tizimingiz tomonidan aniqlangan yangi satrli belgi bo'lishi kerakligini tushunish ham muhimdir. Masalan, UNIX tizimlarida, shu jumladan macOS-da, bu shunday \ n... Yangi satr ham yopilish identifikatoridan so'ng darhol boshlanishi kerak.

Agar ushbu qoida buzilgan bo'lsa va yopilish identifikatori "toza" bo'lmasa, yopilish identifikatori yo'q deb hisoblanadi va PHP uni izlashni davom ettiradi. Agar bu holda to'g'ri yopilish identifikatori hali ham topilmasa, unda bu skript oxirida satr raqami bilan ajralib chiqish xatosiga olib keladi.

Misol №1 Noto'g'ri sintaksis namunasi

sinf foo (
public $ bar =<<bar
EOT;
// yopilish identifikatoridan oldin kirishga ruxsat berilmaydi
}
?>

Misol №2 To'g'ri sintaksis namunasi

sinf foo (
public $ bar =<<bar
EOT;
}
?>

Heredoc sinf maydonlarini ishga tushirish uchun ishlatilishi mumkin emas. PHP 5.3 dan boshlab, bu cheklash faqat o'zgaruvchini o'z ichiga olgan heredoklarga tegishli.

Heredoc matni ikkita tirnoqli mag'lubiyatga ega bo'lmagan holda ishlaydi. Bu shuni anglatadiki, siz heredoc-dagi tirnoqlardan qochishingizga hojat yo'q, lekin siz hali ham yuqoridagi qochish ketma-ketliklaridan foydalanishingiz mumkin. O'zgaruvchilar qayta ishlanadi, lekin heredoc ichida murakkab o'zgaruvchilardan foydalanganda, siz simlar bilan ishlashda bo'lgani kabi ehtiyot bo'lishingiz kerak.

Misol # 3 Heredoc satrini aniqlashga misol

$ str =<<Misol liniyasi,
bir nechta qatorlarni qamrab olgan,
heredoc sintaksisidan foydalanish.
EOD;

Sinf foo
{
var $ foo;
var $ bar;

Funktsiya __construct ()
{
$ this -> foo = "Foo";
$ this ->
}
}

$ foo = yangi foo ();
$ name = "Ism";

aks sado<<Mening ismim "$ name". $ Foo -> foo yozyapman .
Endi men chiqaraman
($ foo -> bar [1]) .
Bu "A" bosh harfini chiqarishi kerak: \ x41
EOT;
?>

Mening ismim "Imarek". Men Foo yozyapman. Endi men Bar2-ni namoyish qilaman. Bunda "A" harfi katta bo'lishi kerak: A

Ma'lumotlarni funktsiya argumentlari orqali uzatish uchun heredoc sintaksisidan foydalanish ham mumkin:

5.3.0 versiyasidan boshlab, heredoc sintaksisidan foydalanib, statik o'zgaruvchilar va sinf xususiyatlari / konstantalarini ishga tushirish mumkin bo'ldi:

5-misol. Statik o'zgaruvchilarni ishga tushirish uchun heredoc-dan foydalanish

// Statik o'zgaruvchilar
funktsiya foo ()
{
statik $ bar =<<Bu erda hech narsa yo'q ...
Yorliq;
}

// Sinf konstantalari / xususiyatlari
sinf foo
{
const BAR =<<Doimiylikni ishlatishga misol
FOOBAR;

Ommaviy $ baz =<<Maydondan foydalanish misoli
FOOBAR;
}
?>

PHP 5.3.0 dan boshlab siz Heredoc identifikatorini ikkita tirnoq bilan o'rab olishingiz mumkin:

Nowdoc

Nowdoc bitta tirnoqli satrlar uchun bir xil, heredoc esa ikkita tirnoqli satrlar uchun. Nowdoc heredokga o'xshaydi, lekin uning ichida hech qanday almashtirish amalga oshirilmaydi... Ushbu konstruktsiya qochib ketmasdan PHP kodini yoki boshqa katta matn bloklarini joylashtirish uchun juda mos keladi. Bunda u biroz SGML konstruktsiyasiga o'xshaydi. matn blokini ishlov berilmasligini e'lon qilish orqali.

Nowdoc xuddi shu ketma-ketlik bilan ko'rsatiladi <<< , bu heredoc-da ishlatiladi, lekin uning identifikatori bitta tirnoq ichiga kiritilgan, masalan, <<<"EOT" ... Heredoc identifikatorlariga taalluqli barcha shartlar nowdoc-ga ham tegishli, ayniqsa yopilish identifikatoriga tegishli.

Misol # 7 nowdoc dan foydalanish misoli

aks sado<<<"EOD"
Namuna matni,
bir nechta qatorlarni qamrab olgan
nowdoc sintaksisidan foydalanish. Orqaga qaytish har doim tom ma'noda muomala qilinadi,
masalan, \\ va \ ".
EOD;

Ushbu misolning natijasi:

Nowdoc sintaksisidan foydalangan holda bir nechta satrlarni o'z ichiga olgan matn namunasi. Orqaga burish har doim tom ma'noda muomala qilinadi, masalan, \\ va \ ".

Misol # 8 o'zgaruvchiga ega bo'lgan Nowdoc mag'lubiyatga misol

/ * O'zgaruvchilar bilan murakkabroq misol. * /
sinf foo
{
public $ foo;
umumiy $ bar;

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

$ foo = yangi foo ();
$ name = "Ism";

aks sado<<<"EOT"
Mening ismim "$ name". $ Foo-> foo yozyapman.
Endi men yozyapman ($ foo-> bar).
Bu "A" bosh harfini bosmasligi kerak: \ x41
EOT;
?>

Ushbu misolning natijasi:

Mening ismim "$ name". $ Foo-> foo yozyapman. Endi men yozyapman ($ foo-> bar). Bu "A" bosh harfini bosmasligi kerak: \ x41

Misol # 9 Statik ma'lumotlardan foydalanish misoli

sinf foo (
public $ bar =<<<"EOT"
bar
EOT;
}
?>

Izoh:

PHP 5.3.0 da Nowdoc yordami qo'shildi.

O'zgaruvchan ishlov berish

Agar satr ikki tirnoq bilan ko'rsatilgan bo'lsa yoki heredoc yordamida bo'lsa, uning ichidagi o'zgaruvchilar qayta ishlanadi.

Sintaksisning ikki turi mavjud: sodda va murakkab. Oddiy sintaksis osonroq va qulayroq. Bu o'zgaruvchining, massivning qiymatini qayta ishlashga imkon beradi ( qator) yoki ob'ekt xususiyatlari ( ob'ekt) minimal harakat bilan.

Murakkab sintaksisni ifodani o'rab turgan jingalak qavslar yordamida aniqlash mumkin.

Oddiy sintaksis

Agar tarjimon dollar belgisiga duch kelsa ( $ ), u to'g'ri o'zgaruvchining nomini yaratish uchun iloji boricha ko'proq belgilarni oladi. Agar siz ismning oxirini aniq belgilamoqchi bo'lsangiz, o'zgarmaydigan nomini jingalak qavs ichiga soling.

$ sharbat = "olma";

echo "U bir oz $ sharbat sharbati ichdi." ... PHP_EOL;

// Noto'g'ri. "s" o'zgaruvchining nomi uchun to'g'ri belgi, ammo o'zgaruvchiga $ juice nomi berilgan.
echo "U $ sharbatidan tayyorlangan sharbat ichdi." ;

// To'g'ri. Qavslar yordamida o'zgaruvchining nomining oxiri qat'iy ko'rsatiladi:
echo "U $ (sharbat) lardan tayyorlangan sharbat ichdi." ;
?>

Ushbu misolning natijasi:

U bir oz olma sharbatini ichdi. U tayyorlangan sharbatni ichdi. Olmadan tayyorlangan sharbat ichdi.

Massiv elementi ( qator) yoki ob'ekt mulki ( ob'ekt). Massiv indekslarida yopiladigan kvadrat qavs ( ] ) indeks ta'rifining oxirini bildiradi. Xuddi shu qoidalar oddiy o'zgaruvchilar kabi ob'ekt xususiyatlari uchun ham qo'llaniladi.

Misol №10 Oddiy sintaksis misoli

define ("KOOLAID", "koolaid1");
$ sharbatlar = massiv ("olma", "to'q sariq", "koolaid1" => "binafsha");

echo "U bir oz $ sharbatini [0] sharbatini ichdi." ... PHP_EOL;
echo "U bir oz $ sharbatini [1] sharbatini ichdi." ... PHP_EOL;
echo "U bir oz $ sharbatlarini [koolaid1] sharbatini ichdi." ... PHP_EOL;

sinf odamlari (
public $ john = "Jon Smit";
public $ jane = "Jeyn Smit";
public $ robert = "Robert Polsen";

Public $ smith = "Smit";
}

$ people = yangi odamlar ();

echo "$ people -> John ozgina $ sharbatlarini [0] sharbatini ichdi." ... PHP_EOL;
echo "$ people -> john keyin $ people -> jane bilan salomlashdi." ... PHP_EOL;
echo "$ people -> john's rafiqasi $ people -> robert bilan salomlashdi.". PHP_EOL;
echo "$ people -> robert ikki $ people -> smiths bilan salomlashdi." ; // ishlamaydi
?>

Ushbu misolning natijasi:

U bir oz olma sharbatini ichdi. U apelsin sharbati ichdi. U bir oz binafsha sharbat ichdi. Jon Smit bir oz olma sharbatini ichdi. Keyin Jon Smit Jeyn Smitga salom yo'lladi. Jon Smitning rafiqasi Robert Polsen bilan salomlashdi, Robert Polsen ikkalasiga salom berdi.

PHP 7.1.0 qo'llab-quvvatlaydi salbiy raqamli ko'rsatkichlar.

Misol # 11 Salbiy raqamli indekslar

$ string = "string";
aks sado "-2 indeksli belgi$ string [- 2]. ", PHP_EOL;
$ string [- 3] = "o";
aks sado "-3 holatidagi belgini" o "ga o'zgartirish quyidagi qatorni beradi:$ string. ", PHP_EOL;
?>

Ushbu misolning natijasi:

-2 indeksli belgi n ga teng. -3 holatidagi belgini "o" ga o'zgartirish quyidagi qatorni beradi: kuchli

Har qanday murakkab narsa uchun murakkab sintaksisdan foydalaning.

Murakkab (jingalak) sintaksis

Buni tushunish qiyin bo'lgani uchun emas, balki murakkab iboralardan foydalanishga imkon berganligi uchun qiyin deb atashadi.

Ushbu sintaksis yordamida har qanday skalar o'zgaruvchisi, qator elementi yoki ob'ekt xususiyati satrda aks ettirilishi mumkin. Faqatgina ifodani chiziqdan tashqarida bo'lgani kabi yozing va keyin uni ichiga qo'ying { va } ... Sifatida { qochib bo'lmaydi, bu sintaksis faqat qachon tan olinadi $ darhol keyin { ... Foydalanish {\$ chop etish {$ ... Bir nechta misollar:

// Barcha xatolarni ko'rsatish
error_reporting (E_ALL);

$ great = "great";

// Ishlamaydi, chiqadi: Bu (zo'r)
echo "Bu ($ great)";

// Ishlar, chiqishlar: Bu juda zo'r
echo "Bu ($ great)";

// Asarlar
aks sado "Bu maydon keng($ square -> width) 00 santimetr. ";

// Ishlar, keltirilgan kalitlar faqat jingalak sintaksis bilan ishlaydi
echo "Bu ishlaydi: ($ arr [" key "])";

// Asarlar
echo "Bu ishlaydi: ($ arr [4] [3])";

// Bu tashqi $ foo bilan bir xil sababga ko'ra noto'g'ri
// torlar. Boshqacha qilib aytganda, bu hali ham ishlaydi.
// lekin PHP avval doimiy o'zgaruvchini qidirganligi sababli, bu chaqiriladi
// E_NOTICE darajadagi xato (aniqlanmagan doimiy).
aks sado "Bu to'g'ri emas:($ arr [foo] [3]) ";

// Asarlar. Ichki ko'p o'lchovli massivlardan foydalanganda
// satrlar har doim jingalak qavslardan foydalanadi
echo "Bu ishlaydi: ($ arr [" foo "] [3])";

// Asarlar.
echo "Bu ishlaydi:". $ arr ["foo"] [3];

aks sado "Bu ham ishlaydi:($ obj -> qiymatlar [3] -> ism) ";

aks sado "Bu o'zgaruvchining nomi bo'yicha qiymati$ nomi: ($ ($ name)) "";

aks sado "Bu getName () funktsiyasi qaytaradigan nomdagi o'zgaruvchining qiymati:($ (getName ())) ";

aks sado "Bu o'zgaruvchining nomidagi qiymati, bu $ \ return \ object object-> getName ():($ ($ object -> getName ())) ";";

// ishlamayapti, chiqadi: getName () qaytaradigan narsa: (getName ())
aks sado "GetName () qaytaradigan narsa: (getName ())";
?>

Ushbu sintaksis yordamida satr ichidagi ob'ekt xususiyatlariga kirish imkoniyati ham mavjud.

sinf foo (
var $ bar = "Men barman." ;
}

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

Ushbu misolning natijasi:

Men barman. Men barman.

Izoh:

Funksiyalar, metod chaqiriqlar, statik sinf o'zgaruvchilari va sinf doimiylari ichki ishlaydi {$} PHP-dan beri 5. Biroq, ko'rsatilgan qiymat o'zgaruvchi nomi sifatida belgilanadi, u aniqlangan satr bilan bir xil kontekstda. Yagona jingalak qavslardan foydalanish ( {} ) funktsiyalar, usullar, sinf doimiylari yoki statik sinf o'zgaruvchilarining qiymatlariga kirish uchun ishlamaydi.

// Barcha xatolarni ko'rsatish
error_reporting (E_ALL);

sinf pivolari (
const softdrink = "rootbeer";
public static $ ale = "ipa";
}

$ rootbeer = "A & W";
$ ipa = "Aleksandr Keyt";

// Bu ishlaydi, natijalari: Men A & W ni xohlayman
echo "Men istayman ($ (beers :: softdrink)) \ n";

// Bu ham ishlaydi, natijalar: Men Aleksandr Keytni xohlayman
echo "Men istayman ($ (beers :: $ ale)) \ n";
?>

Satrdagi belgiga kirish va o'zgartirish

Satrlardagi simvollarni satrning boshidan boshlab, noldan boshlab, qatordan keyin to'rtburchaklar ichida, ularning o'rnini belgilash orqali o'zgartirish va o'zgartirish mumkin, masalan, $ str. Ushbu maqsad uchun qatorni bir qator belgilar qatori deb o'ylang. Agar sizga 1 dan ortiq belgini olish yoki almashtirish kerak bo'lsa, funktsiyalardan foydalanishingiz mumkin substr () va substr_replace ().

Izoh: chunki PHP 7.1.0 salbiy ofset qiymatlari qo'llab-quvvatlanadi. Ular chiziqning oxiridan boshlab ofsetni o'rnatdilar. Ilgari salbiy ofsetlar darajadagi xatolikni keltirib chiqardi E_NOTICE o'qish paytida (bo'sh satrni qaytarish) ham E_DIQORAT yozish paytida (qatorni o'zgarishsiz qoldirish).

Izoh: Satrdagi belgiga jingalak qavslar yordamida ham kirish mumkin, masalan, $ str (42).

Diqqat

Oflayn chiziqli ofsetga yozishga urinish qatorni shu ofsetgacha bo'shliqlar bilan to'ldiradi. Butun bo'lmagan turlar butun sonlarga aylantiriladi. Noto'g'ri ofset turi darajadagi xatolikni keltirib chiqaradi E_DIQORAT... Belgilangan satrning faqat birinchi belgisi ishlatiladi. PHP 7.1.0 dan boshlab bo'sh satrni tayinlash o'lik xatolikka olib keladi. Ilgari, bu holatda NULL bayt tayinlangan edi.

Diqqat

PHP-dagi satrlar ichki baytlar qatoridir. Natijada, ofsetda mag'lubiyatga kirish yoki o'zgartirish ko'p baytli kodlash nuqtai nazaridan xavfli hisoblanadi va faqat ISO-8859-1 kabi bir baytli kodlashdagi satrlar bilan bajarilishi kerak.

Izoh: PHP 7.1.0 dan boshlab bo'sh indeksdan foydalanish o'limga olib keladigan xatolarni keltirib chiqaradi, ilgari, xuddi shunday holatda, qator ogohlantirmasdan qatorga aylantirildi.

Misol # 12 Ba'zi bir qatorlar misollari

// Ipning birinchi belgisini oling
$ str = "Bu sinov." ;
$ first = $ str [0];

// Ipning uchinchi belgisini oling
$ third = $ str [2];

// Ipning oxirgi belgisini oling
$ str = "Bu hali ham sinov." ;
$ last = $ str [strlen ($ str) - 1];

// Satrning oxirgi belgisini o'zgartiring
$ str = "Dengizga qarang";
$ str [strlen ($ str) - 1] = "e";

?>

PHP 5.4 dan boshlab satrdagi ofset butun son sifatida yoki raqamlarni o'z ichiga olgan qator sifatida ko'rsatilishi kerak, aks holda ogohlantirish beriladi. Ilgari ko'rinish satrida ko'rsatilgan ofset "foo", ogohlantirishlarsiz aylantirildi 0 .

Misol №13 PHP 5.3 va PHP 5.4 o'rtasidagi farqlar

$ 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"]));
?>

PHP 5.3 da ushbu misolni ishlash natijasi:

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

PHP 5.4 da ushbu misolni ishlash natijasi:

string (1) "b" bool (true) Ogohlantirish: 7-qatorda /tmp/t.php-dagi "1.0" qatorining noqonuniy ofseti (1) "b" bool (false) ogohlantirish: "x" in tmp / t.php 9-satrda satr (1) "a" bool (false) string (1) "b" bool (false)

Izoh:

Boshqa turdagi o'zgaruvchilardan foydalanishga urinish (ba'zi interfeyslarni amalga oshiradigan massivlar yoki ob'ektlar bundan mustasno) yoki {} jimgina qaytib keling NULL.

Izoh:

PHP 5.5 sintaksis yordamida satr harflaridagi belgilarga kirishni qo'llab-quvvatladi yoki {} .

Satrlarni o'zgartirish uchun juda ko'p foydali funktsiyalar mavjud.

Asosiy funktsiyalar satr funktsiyalari bo'limida, kengaytirilgan qidirish va almashtirish uchun Perl-ga mos keladigan doimiy iboralarning funktsiyalari tasvirlangan.

Ipga aylantirish

Kast yordamida qiymatni mag'lubiyatga aylantirish mumkin (mag'lubiyat) yoki funktsiyalar strval ()... Ip kerak bo'lgan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi. Bu funktsiyalardan foydalanganda sodir bo'ladi aks sado yoki chop etish yoki o'zgaruvchining qiymati satr bilan taqqoslanganda. Qo'llanmaning Turlar va Manipulyatsiya bo'limlarini o'qish quyidagilarni yanada aniqroq qiladi. Shuningdek qarang settype ().

Massivlar har doim mag'lubiyatga aylantiriladi "Array" shuning uchun siz qator tarkibini namoyish qila olmaysiz ( qator) foydalanish aks sado yoki chop etish tarkibida nima borligini ko'rish uchun. Shaxsiy elementni ko'rish uchun shunga o'xshash narsadan foydalaning echo $ arr ["foo"]... Barcha tarkibni qanday ko'rsatish / ko'rish bo'yicha maslahatlar uchun quyida ko'rib chiqing.

O'zgaruvchini turga aylantirish uchun "Ob'ekt" turi bo'yicha mag'lubiyat __toString sehrli usuli qo'llaniladi.

Qiymat NULL har doim bo'sh satrga aylanadi.

Yuqorida ko'rib turganingizdek, massivlar, ob'ektlar yoki manbalar qatoriga to'g'ridan-to'g'ri konvertatsiya qilish qiymatlarning o'zlari haqida, ularning turlaridan tashqari, foydali ma'lumotlar bermaydi. Nosozliklarni tuzatish uchun qiymatlarni chiqarishning eng yaxshi usuli bu funktsiyalardan foydalanishdir print_r () va var_dump ().

PHP-ning aksariyat qiymatlari doimiy saqlash uchun mag'lubiyatga aylantirilishi mumkin. Ushbu usul ketma-ketlashtirish deb nomlanadi va funktsiya yordamida amalga oshirilishi mumkin serialize ().

Iplarni raqamlarga aylantirish

Agar mag'lubiyat raqamli qiymat sifatida tan olinsa, natijada qiymat va tur quyida ko'rsatilgandek aniqlanadi.

Agar satrda ".", "E" yoki "E" belgilaridan biri bo'lmasa va sonning qiymati butun sonlar oralig'ida joylashgan bo'lsa (aniqlangan bo'lsa) PHP_INT_MAX), satr butun son sifatida tan olinadi ( butun son). Boshqa barcha holatlarda, u suzuvchi nuqta raqami ( suzmoq).

Qiymat mag'lubiyat boshi bilan belgilanadi. Agar mag'lubiyat raqamli qiymatdan boshlasa, u qiymat ishlatiladi. Aks holda, qiymat 0 (nol) ga teng bo'ladi. Haqiqiy raqamli raqam bir yoki bir nechta raqamlar (o'nlik punktni o'z ichiga olishi mumkin), ixtiyoriy ravishda oldin belgi, so'ngra ixtiyoriy ko'rsatkich bilan belgilanadi. Ko'rsatkich - bu "e" yoki "E", keyin bir yoki bir nechta raqamlar.

$ foo = 1 + "10.5"; // $ foo suzuvchi (11.5)
$ foo = 1 + "-1.3e3"; // $ foo float (-1299)
$ foo = 1 + "bob-1.3e3"; // $ foo butun son (1)
$ foo = 1 + "bob3"; // $ foo butun son (1)
$ foo = 1 + "10 ta kichik cho'chqa"; // $ foo butun son (11)
$ foo = 4 + "10.2 Kichik Piggies"; // $ foo suzuvchi (14.2)
$ foo = "10.0 cho'chqa" + 1; // $ foo suzuvchi (11)
$ foo = "10.0 cho'chqa" + 1.0; // $ foo suzuvchi (11)
?>

Ushbu konversiya haqida ko'proq ma'lumot olish uchun Unix hujjatlarining strtod (3) bo'limiga qarang.

Agar siz ushbu bo'limdagi misollardan birini sinab ko'rishni istasangiz, nima bo'lishini ko'rish uchun uni va quyidagi qatorni nusxa ko'chiring va joylashtiring:

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

Belgilar kodini tamsayıga aylantirish orqali olishni kutmang (masalan, C da bo'lgani kabi). Belgilarni ularning ASCII kodlariga va aksincha aylantirish uchun funktsiyalardan foydalaning ord () va chr ().

String turini bajarish tafsilotlari

7 yil oldin

Hujjatlarda bu haqda hech narsa aytilmagan, lekin heredoc-ning oxirida yopiladigan nuqta-vergul aslida haqiqiy nuqta-vergul sifatida talqin etiladi va shu sababli ba'zida sintaksis xatolariga olib keladi.

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

Bu shunday emas:

foo (<<a B C D
OXIRI;
);
// sintaksis xatosi, kutilmagan ";"
?>

Vertikalsiz u yaxshi ishlaydi:

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

3 yil oldin

Siz qator qatori kabi foydalanishingiz mumkin (masalan, C)

$ a = "String array testi";

var_dump ($ a);
// Return string (17) "String array test".

var_dump ($ a);
// Qaytish qatori (1) "S"

// - Massiv bilan -
var_dump ((qator) $ a);
// Return array (1) (=> string (17) "String array test")

var_dump ((qator) $ a);
// Qaytish qatori (17) "S"

Norixiori

15 yil oldin

Ikkala ob'ekt xususiyatlarini va satr ichiga ob'ekt usullarini qiymatini qo'yish uchun murakkab sintaksisdan foydalanishingiz mumkin. Masalan ...
sinf sinovi (
public $ one = 1;
jamoat funktsiyasi ikkita () (
qaytish 2;
}
}
$ test = yangi Test ();
echo "foo ($ test -> one) bar ($ test -> two ())";
?>
"Foo 1 bar 2" chiqadi.

Biroq, buni o'zingizning nomingizdagi barcha qiymatlar uchun qila olmaysiz. Sinf barqarorlari va statik xususiyatlari / usullari ishlamaydi, chunki murakkab sintaksis "$" ni qidiradi.
sinf sinovi (
const ONE = 1;
}
echo "foo (Test :: ONE) bar";
?>
Bu "foo (Test :: one) bar" ni chiqaradi. Doimiy va statik xususiyatlar qatorni ajratishni talab qiladi.

3 yil oldin

"Raqamlarga satrlarni konvertatsiya qilish" ga mos keladigan ehtiyot bo'ling:

Agar ("123abc" == 123) aks sado "(intstr == int) noto'g'ri deb tekshiradi.";

// Bir tomoni raqam bo'lgani uchun mag'lubiyat intstr dan int ga noto'g'ri aylantirilib, keyin sinov raqamiga to'g'ri keladi.

// if va switch operatorlari kabi barcha shartli shartlar uchun to'g'ri (ehtimol looplar paytida ham)!

// Bu faqat butun sonni kutish va sinab ko'rish paytida foydalanuvchi ma'lumotlarini sinash / ishlatishda / saqlashda katta xavfsizlik xavfi bo'lishi mumkin.

// 123-ning "123" qatori bo'lishi uchun yagona tuzatish kerak, shuning uchun hech qanday konvertatsiya bo'lmaydi.

?>

6 yil oldin

Iplardagi etakchi nollar sakkizinchi sifatida qabul qilinmaydi (eng kam ajablanib).
Ko'rib chiqing:
$ x = "0123" + 0;
$ y = 0123 + 0;
echo "x - $ x, y - $ y"; // "x - 123, y - 83" ni bosib chiqaradi
boshqa so'zlar bilan aytganda:
* manba kodidagi raqamli harflardagi etakchi nollar "sakkizli" deb izohlanadi, c.f. strtol ().
* satrdagi etakchi nollar (masalan, foydalanuvchi tomonidan taqdim etilgan ma'lumotlar), qachonki (aniq yoki aniq) butun songa e'tibor berilmasa va kasr sifatida qaralsa, cf. strtod ().

10 yil oldin

Ikkala tirnoqli satrlar va heredoklarning jingalak qavslar sintaksisida o'zboshimchalik bilan ifodalarni, shu jumladan doimiy va boshqa funktsiya chaqiruvlarini o'z ichiga olishiga yo'l qo'yadigan oson hack.

// Hack deklaratsiyasi
function _expr ($ v) (return $ v;)
$ _expr = "_expr";

// Bizning o'yin maydonchamiz
aniqlang ("qwe" , "asd");
aniqlang("zxc", 5 );

$ a= 3 ;
$ b= 4 ;

funktsiya v($ a, $ b) (qaytish$ a+ $ b; }

// Foydalanish
aks sado"oldindan{ $ _expr(1 + 2 )} post \ n "; // "pre 3 post" natijalari
aks sado"oldindan{ $ _expr(qwe)} post \ n "; // "pre asd post" natijalari
aks sado"oldindan{ $ _expr(v($ a, $ b)+ zxc* 2 )} post \ n "; // "pre 17 post" natijalari

// Umumiy sintaksis ($ _expr (...))
?>

2 yil oldin

Ushbu fikrni hech bo'lmaganda PHP saytidagi o'ng sahifada paydo bo'lishi uchun ushbu sharhni qo'shish foydali bo'lar edi.

Shuni esda tutingki, agar siz assotsiativ kalit bilan ikkita tirnoqli mag'lubiyatdan foydalanmoqchi bo'lsangiz, T_ENCAPSED_AND_WHITESPACE xatosiga duch kelishingiz mumkin. Ba'zilar buni aniqroq bo'lmagan xato xabarlaridan biri deb hisoblashadi.

Quyidagi ifoda:

$ meva= qator (
"a"=> "olma",
"b"=> "banan",
// va boshqalar
);

Chop etish "Bu$ meva[ "a"] "; // T_ENCAPSED_AND_WHITESPACE
?>

albatta qismlarga bo'linadi.

Siz buni quyidagicha hal qilishingiz mumkin:

chop etish"Bu$ meva[ a] " ; // kalitni olib qo'ying
chop etish"Bu${ meva[ "a"]} " ; // Murakkab sintaksis
chop etish"Bu{ $ meva[ "a"]} " ; // Murakkab sintaksis o'zgarishi
?>

So'nggi o'zgarishlarga shaxsiy imtiyozim bor, chunki bu tabiiyroq va mag'lubiyatdan tashqaridagi ifoda qanday bo'lishiga yaqinroq.

PHP nima uchun ibora ichidagi bitta tirnoqni noto'g'ri talqin qilishi aniq emas (men uchun, hech bo'lmaganda), lekin bu uning tirnoqlari bilan bog'liqligini tasavvur qilaman, chunki bu satr qiymatning bir qismi emas - agar satr allaqachon tirnoqlarni tahlil qilsa xalaqit bering ...?

2 yil oldin

Ikkalasi ham ishlashi kerak :(

sinfSinov{
ommaviy statik
$ VAR= "statik";
umumiy konstruktsiya VAR =
"const";

Jamoat funktsiyasi SalomStatik deb ayting() {
aks sado
"Salom:{ $ bu:: $ VAR} " ;
}

Jamoat funktsiyasi SalomConst() {
aks sado
"Salom:{ $ bu:: VAR)" ; // Sinov xatosi: sintaksis xatosi, kutilmagan ")", kutish paytida "["
}
}

$ obj= yangiSinov();
$ obj-> SalomStatik deb ayting();
$ obj-> SalomConst();

3 yil oldin

Men boshdan kechirgan, shubhasiz, kimgadir yordam beradigan narsa. ... ...
Mening muharririmda bu sintaksis HTML va $ comment-ni ta'kidlaydi:

$ html =<<<"EOD"
$ sharh
EOD;

Buning yordamida bir xil rang ko'rsatilgan:

$ html =<<$ sharh
EOD;

ishlashni ancha osonlashtirmoqda

11 yil oldin

Fikringizni saqlab qolish uchun sana haqidagi avvalgi sharhlarni o'qimang;)

Ikkala satrni ham raqamga aylantirish mumkin bo'lganda (("$ a"> "$ b" testida), natijada raqamlar ishlatiladi, aks holda FULL satrlari char-by-char bilan taqqoslanadi:

var_dump("1.22" > "01.23" ); // bool (false)
var_dump("1.22.00" > "01.23.00" ); // bool (rost)
var_dump("1-22-00" > "01-23-00" ); // bool (rost)
var_dump((suzuvchi)"1.22.00" > (suzuvchi)"01.23.00" ); // bool (false)
?>

PHP satrlari bitta yoki ikkita tirnoq bilan o'ralgan. Asosiy farq shundaki, siz o'zgaruvchini ikki tirnoq bilan almashtirishingiz mumkin:

Endi biz PHP-da o'zgaruvchilar darsidan muammoning yana bir echimini topishimiz mumkin:

$ sarlavha"; echo"

$ kontent
"; ?>

PHP qanday qilib satrda o'zgaruvchini topadi?

Hammasi oddiy. O'zgaruvchan nomda qanday belgilar ishlatilishini eslang? Bu raqamlar, harflar va pastki chiziq _.

Shunday qilib, PHP $ belgisi va birinchi taqiqlangan belgi orasidagi hamma narsani nom sifatida qabul qiladi.

Quyidagi kodda PHP o'zgarmaydigan nomini noto'g'ri aniqlaydi va xatoga yo'l qo'yadi:

Brauzerda natija:

Izoh: Aniqlanmagan o'zgaruvchi: 3-satrda D: \ OpenServer \ domains \ site \ index.php-da pricerub.

PHP satrdagi o'zgaruvchining nomini to'g'ri aniqlashi uchun uni jingalak qavslarga () qo'yishingiz kerak:

Brauzerda natija:

1499 RUR

O'zgartirishga hojat bo'lmagan oddiy satrlar uchun qaysi tirnoqlardan foydalanish kerakligi to'g'risida aniq fikr yo'q. Biroq, ko'plab dasturchilar bitta tirnoqlardan foydalanishni afzal ko'rishadi.

Gap shundaki, ko'p odamlarda ikki martalik tirnoqlar "biron bir narsani shu qatorga almashtirish kerak" degan uyushmani keltirib chiqaradi. Shuning uchun men oddiy matn uchun bitta tirnoqlardan foydalanishni tavsiya etaman, va agar siz matndagi o'zgaruvchini almashtirish kerak bo'lsa, ikkilangan tirnoqlardan foydalaning. Misol:

Tirnoqlardan qochish

Agar satr ichiga tirnoq qo'yish kerak bo'lsa, uni bajarishning ikkita usuli mavjud:

Ikkinchi misolda, teskari chiziq \ quyidagi tirnoqdan qochib ketadi, shunda PHP uni mag'lubiyat sifatida izohlaydi.

Faqat teskari burilish chizig'ini ko'rsatish uchun nima qilish kerak deb o'ylaysiz? Axir, bu yakuniy taklifdan qochib qutuladi. Bu juda kulgili, lekin birinchisidan qochish uchun ikkinchi chiziqni yozish kerak:

Ikki tirnoqli yorliqlar va qatorlar

Ikki tirnoqdagi teskari chiziq sizga nafaqat tirnoqlardan va o'zingizdan, balki boshqa ba'zi belgilardan ham qochishga imkon beradi. Eng ommaboplari bu yorliqlar (TAB tugmachasini bosganingizda bo'sh joy bo'sh joy) va chiziqlar. Ular shunday ko'rinadi:

Stsenariy yozing:
1. O'yin qiymati bilan o'zgaruvchan $ turini yaratadi.
2. "World of Warcraft" (tirnoqlari bilan) qiymatiga ega o'zgaruvchining nomini yaratadi.
3. Teg ichida ikkala o'zgaruvchini ham ko'rsatadi

... O'zgaruvchilar o'rtasida bo'sh joy bo'lishi kerak.

Iplarni - apostroflarni yoki klassik qo'shaloq tirnoqlarni bezash uchun qanday tirnoqlardan foydalanishim kerak?

Keling, PHP-dagi ikkita va bitta tirnoqlarning farqini ko'rib chiqamiz va qaysi birini qachon ishlatishni bilish uchun misollar yordamida murojaat qilamiz.

Bitta tirnoq ichiga kiritilgan qatorlarda topilgan maxsus belgilar uchun o'zgaruvchilar va qochish ketma-ketliklari qayta ishlanmaydi. Apostroflar bilan o'ralgan satrlar PHP tarjimoni tomonidan ikkita tirnoq bilan o'ralgan o'xshash satrlarga qaraganda ancha tezroq ishlov beriladi.

Sababi oddiy: PHP tarjimoni qo'shimcha tirnoqlarda satrlar uchun o'zgaruvchilar mavjudligini qo'shimcha ravishda tekshiradi va agar ular topilsa, o'zgaruvchining nomi o'rniga uning qiymati satrga kiritiladi. Ammo apostroflarga kiritilgan qatorni tarjimon oddiy matn sifatida talqin qiladi va PHP bu satrlarda hech qanday o'zgarishlarni amalga oshirmaydi. O'ylaymanki, bitta tirnoqli satrlarni qayta ishlash baribir tezroq bo'ladi.

Dastlab, qanday qilib mag'lubiyatni belgilashni ta'riflab beramiz va keyin bitta tirnoqdagi satrlarni qayta ishlash qanchalik tezroq bo'lishini tekshirib ko'ramiz.

Satrni aniqlashning eng oson usuli - uni bitta tirnoq ichiga qo'shish ("). Bitta tirnoq ichidagi bitta tirnoqni ishlatish uchun ularning oldiga teskari (\) belgi qo'yilishi kerak, ya'ni qochish kerak. Agar teskari chiziq bitta tirnoqdan oldin yoki satr oxirida bo'lishidan oldin, uni takrorlashingiz kerak Agar boshqa biron bir belgidan qochishga harakat qilsangiz, teskari chiziq ham bosiladi.

Yagona tirnoqlardan foydalanishga misol:
// Chiqish: oddiy mag'lubiyat
echo "Simple string";
// Chiqishlar: men bu erdaman
echo "men bu erda" ";
// Chiqishlar: Bu yangi qatorga qo'shilmaydi: \ n yangi satr
echo "Bu: \ n yangi qator qo'shilmaydi";
// Chiqish: Variable $ misoli ham almashtirilmaydi
echo "O'zgaruvchan $ misoli ham almashtirilmaydi"; Agar mag'lubiyat ikki qavatli tirnoqlarga (") kiritilgan bo'lsa, PHP maxsus belgilar uchun ko'proq qochish ketma-ketligini taniydi va o'zgarmaydigan nom o'rniga uning o'rnini bosadi. Bitta tirnoqlarda bo'lgani kabi, ikkita tirnoq ichiga olingan satrda ikkita tirnoqni ishlatish uchun ular oldin teskari burilish belgisi (\) bo'lishi kerak.

Ikkita tirnoqlardan foydalanishga misol:
// Chiqish: oddiy mag'lubiyat
echo "Simple string";
// Chiqish: Firma "Snowdrop" "
echo "Firma \" Snowdrop \ "";
// Chiqish: Bu yangi qatorga o'tadi
echo "Bu yangi satr bo'ladi \ n";
// Chiqish: o'zgaruvchi o'rnini bosadi
$ example = "almashtiriladi";
echo "Variable $ example"; Shuni ham yodda tutish kerakki, "\ n" (yangi qator), "\ r" (vagonni qaytarish) ketma-ketligi HTML uchun emas, balki oddiy matn uchun mo'ljallangan. Shunday qilib brauzerda siz o'zgarishlarni ko'rmaysiz (faqat sahifaning manba kodida).

Keling, bitta tirnoq qanchalik tez ikki qavatli tirnoq ekanligini bilib olaylik. O'lchovlar uchun biz qisqa test skriptini yozamiz va darhol ta'kidlab o'tamiz, agar siz uni uyda sinab ko'rsangiz, shaxsiy kompyuteringiz yoki serveringiz apparatiga bog'liq natijalar boshqacha bo'ladi.
// Tsikl boshida vaqt tamg'asini qaytaring
$ start = mikrotime (rost);
// 1 million takrorlash uchun tsikl yarating
uchun ($ i = 0; $ i< 1000000; $i++) {
$ text = "Bu belgi qatori";
}
// O'tkazilgan vaqtni hisoblang
$ time = (microtime (true) - $ start); Natija: 0,09 soniya.

Agar bitta tirnoqni ikkita tirnoq bilan almashtirsak:
$ text = "Bu belgi qatori"; Natijada 0,10 soniya bo'ladi.

Ko'rib turganingizdek, matn satrlaridan foydalanishda ijro vaqtidagi farq juda oz, hatto umuman yo'q deb aytish mumkin. Qiziqish biz mag'lubiyat va o'zgaruvchini birlashtirishga harakat qilganda boshlanadi.
$ text = "Mana $ i belgilar qatori"; yoki
$ text = $ i. "Bu belgi qatori"; Natija taxminan: 0,27 soniya.

Farqi sezilarli. Birlashma va ikkilangan tirnoqlar qatorga o'zgaruvchilar qo'shilganda ishlashga aniq ta'sir qiladi.

Server kodni qayta ishlaganda o'zgaruvchilar, doimiylar va boshqalarni qo'shaloq kotirovkalarning barcha tarkibini tekshiradi. Bu vaqt talab etadi. Bitta kotirovka orasidagi narsa server tomonidan tayyor matn sifatida qayta ishlanadi va u erda nima borligi ahamiyatsiz. Bitta va ikkita kotirovkalarning ishlashi o'rtasidagi farq juda ahamiyatsiz, ammo agar siz juda yuklangan loyihani ishlab chiqayotgan bo'lsangiz, unda bir necha tejalgan millisekundlar allaqachon g'alaba.