PHP da shablonlardan foydalanish. PHP da joker belgilar va satrlardagi belgilar indekslaridan foydalanish

Uy / Brauzerlar

IN yaqinda Habré-da PHP tilini muhokama qilish ko'proq dizayn imkoniyatlariga to'g'ri keladi murakkab tizimlar, bu quvonmasdan bo'lmaydi. Biroq, o'nlab taniqli veb-ramkalarni (Zend Framework, Adept, CakePHP, CodeIgniter, LIMB, Symfony, MZZ va boshqalar) ko'rib chiqqach, ba'zilarida elementar optimallashtirish nuqtai nazaridan sezilarli kamchiliklarni topib, chin dildan hayratda qoldim. .

Ushbu mavzuni texnik jihatdan ko'proq yo'naltirish uchun natijalar yanada qat'iy shaklda taqdim etiladi, bu esa idrokni biroz qiyinlashtirishi mumkin.

Demak, ketaylik... Vazifa nihoyatda oddiy: bitta va qoʻsh tirnoq ichida pastki satrlardan satrlarni shakllantirish tezligi boʻyicha tajribalar oʻtkazing. Aslida, bu savol hali ham dolzarb bo'lib qoladi uzoq vaqt davomida; anchadan beri PHPda string ishlov berishning o'ziga xos xususiyatlaridan kelib chiqqan holda.

Rus tilida ham, boshqa tillarda ham skriptlarni asosiy optimallashtirish bo'yicha ko'plab maqolalar mavjud. Unda satrlar haqida juda oz narsa aytilgan, lekin ikki tirnoq ichidagi satrlar o'zgaruvchilar va boshqaruv belgilari uchun (xuddi rasmiy hujjatlarda bo'lgani kabi) "tahlil qilingan"ligini ta'kidlaydi. Shunga asoslanib, qo'sh tirnoq ichidagi satrlardan foydalanish, bitta tirnoq ichidagi pastki qatorlar bilan bir xil operatsiyalarga qaraganda biroz sekinroq ishlaydi deb taxmin qilish mantiqan to'g'ri.

O'zgaruvchilarni satrlarga almashtirish va o'zgaruvchilarni pastki satrlar bilan birlashtirishdan tashqari, PHP satrlarni yaratishning kamida yana bir usulini qo'llaydi: sprintf funktsiyasi bilan ishlash. Buni taxmin qilish mantiqan to'g'ri bu usul keraksiz funktsiya chaqiruvi va ichidagi satrni tahlil qilish tufayli "standart"lardan sezilarli darajada past bo'ladi.

Yagona qo'shimcha, men sizga test skript kodini taqdim etishdan oldin: 2 ta narsani hisobga olish kerak mumkin bo'lgan variantlar ikki tirnoqli satrlar bilan ishlash: oddiy va "ilg'or" kodlash uslublarini hisobga olgan holda. Ehtimol, o'zgaruvchilar satrlarning boshida ekanligiga e'tibor bermasligingiz kerak - ular faqat misollar:
$string = "$_SERVER["HTTP_HOST"] Ulyanovsk viloyati ma'muriyati emas. Biz rus tilini yaxshi ko'ramiz va bu tilda gapiradiganlarni yoqtirmaymiz..."
Va
$string = "($_SERVER["HTTP_HOST"]) Ulyanovsk viloyati ma'muriyati emas. Biz rus tilini yaxshi ko'ramiz va bu tilda gapiradiganlarni yoqtirmaymiz..."

Birinchi raqamli test.
Xo'sh, barcha rezervasyonlar qilinganga o'xshaydi - ish natijalarini ko'rsatish vaqti keldi. Manba kodi testerni topish mumkin.

Skrinshotlar mening gipotezam tasdiqlanmaganligini ko'rsatadi. Yagona to'g'ri taxmin sprintf orqali satrlar bilan ishlash haqida bo'lib chiqdi. Eng tezkorlari qo'sh tirnoq bilan ishlaydigan funktsiyalar edi.

Vaziyat haqida qisqacha o'ylab ko'rgandan so'ng, tushuntirish o'z-o'zidan paydo bo'ldi: butun gap shundaki, almashtirishlar amalga oshirilgan mos yozuvlar qatori juda qisqa: tahlilchining bunday ipdan o'tishi bir parcha kekdir. Biroq, bu erda ham o'zgaruvchini satrga mahalliy almashtirish "ilg'or uslub" dan ustunlik berishi aniq.
Bu, shuningdek, birlashtirish yondashuvining zaifligi: kiritilgan ma'lumotlar hajmi pastki satrlar hajmidan oshadi. Yuqorida aytib o'tilgan xabratopikada qo'shimcha xarajatlar qayerdan kelib chiqqanligini o'qishingiz mumkin.

Biroq, hatto bu fikrlar ham tasdiqlanishi kerak edi. Bu shunday oldindan aytib bo'lmaydigan (men uchun) xatti-harakatlarning mumkin bo'lgan sabablarini o'zgartirish bilan ikkinchi sinovni talab qildi. Ko'rinishidan, beshinchi versiyada ko'p narsa o'zgartirilgan (tan oling, PHP ning beshinchi versiyasida men faqat 1 ta sinovni o'tkazdim: massiv elementlarini kesib o'tish uchun).

Ikkinchi test.
Ikkinchi gipoteza: mos yozuvlar qatorini uzaytirish, oxir-oqibat, 1-sonli test natijalariga nisbatan qo'sh tirnoqlarda satrlarni shakllantirish bilan bog'liq bo'lgan test funktsiyalarining ishlash vaqtining foizining oshishiga olib keladi. Nazariy jihatdan xuddi shunday holat kuzatilishi kerak. sprintf funksiyasining ishlashiga nisbatan. Bu, birinchi navbatda, satrlarni tahlil qilish zarurati va bunga sarflangan vaqtni ko'paytirish bilan bog'liq. Yagona qo'shtirnoq ichidagi pastki satrlarni birlashtirish bilan bog'liq vaziyatda, menimcha, birinchi sinovdagi kabi taxminan bir xil natija kuzatiladi, bu quotes_3() funktsiyasining bajarilish vaqtiga nisbatan bir oz pasayishiga olib keladi. butun skriptning (lekin unumdorlikni oshirish emas).

Xulosalar aslida faqat ijobiy va gipotezani tasdiqlaydi. Malumot satrining biroz o'sishi bilan katta yuk paydo bo'ladi, bu esa qo'sh tirnoq va sprintf bilan ishlash funktsiyalarining ishlashini pasayishiga olib keladi.

Yagona tirnoq ichidagi satrlar haqidagi taxmin ham to'g'ri chiqdi: birinchi testda 36,75% vaqt o'rniga, ikkinchisida quotes_3() funksiyasi skriptni bajarish vaqtining 33,76% ni egalladi.

Amaliy qiymat.
Oddiy so'zlar bilan aytganda, ma'lumotlardan xulosa chiqarib, biz shunday xulosaga kelishimiz mumkin: almashtirishni amalga oshirish kerak bo'lgan chiziq qancha uzun bo'lsa, shunchalik uzoqroq bo'ladi. ehtimoli ko'proq, qo'sh tirnoq ichida o'zgaruvchini qidirishdan ko'ra, birlashtirish operatsiyasi tezroq bajariladi. Ko'ngillilar kerakli kiritish parametrlarini (o'zgaruvchilar soni, mos yozuvlar qatorining uzunligi, o'zgaruvchilardagi satrlarning uzunligi) tanlashga harakat qilishlari mumkin, shunda ular bajarilish vaqtlarining tengligini qondiradilar.

Hammasi shu, aslida. Qo'shimcha qilish kerakki, dasturlashda arzimas narsa yo'q (men "gugurtlarni tejash" deyishni yaxshi ko'radiganlar uchun aytmoqchiman (c) Adelf). Bunday nozikliklarni bilib, ularni hisobga olgan holda siz uning barcha darajalarida optimallashtiriladigan kod yozishingiz mumkin;)

PS:
Testlar Zend Studio For Eclipse 6.0.0 yordamida amalga oshirildi (Debugger + Profiler kiritilgan).
PHP versiyasi 5.2.5
Debian Linux operatsion tizimi

PPS:
Agar kimdir ushbu testlar natijalarini e'lon qilsa, xursand bo'lardim. O'ylaymanki, bu satrlarni almashtirishning u yoki bu usulini qo'llash zarurligini yanada ob'ektiv baholash imkonini beradi. Taqdimot uslubi va dizaynini sog'lom tanqid qilishni ham qadrlayman.

String turining qiymatlari matn satrlari (qisqa uchun satrlar). Satr - bu nol yoki undan ortiq belgilar ketma-ketligi. Belgilarga harflar, raqamlar, tinish belgilari, maxsus belgilar va bo'shliqlar.

Satr to'rtta bilan belgilanishi mumkin turli yo'llar bilan:

  • qo'sh tirnoq
  • yagona tirnoq
  • heredok sintaksisi
  • nowdoc sintaksisi

Ikki tirnoqli qator

Ikki tirnoqli qator:

Ikki tirnoqli satrlarda qochish ketma-ketliklaridan foydalanishingiz mumkin. Boshqarish ketma-ketligi— bu matn chiqishini formatlash uchun mo‘ljallangan maxsus belgilar. PHP da quyidagi qochish ketma-ketliklari mavjud:

Ikki tirnoqli satrlarning asosiy xususiyati satrlar ichidagi o'zgaruvchilarni boshqarish qobiliyatidir.


Dollar belgisi: \$";

Ikki tirnoq ichiga olingan satrlar bitta tirnoqli belgilarni o'z ichiga olishi mumkin:

Echo "Yagona tirnoq: "";

Bitta tirnoq ichidagi satr (apostrof)

Bitta tirnoq ichidagi satr:

$str = "String"; echo "Bir katta satrni o'qishni osonlashtirish uchun bir nechta kichik qatorlarga bo'lish mumkin.";

Ikki tirnoqli satrlar va heredok sintaksisidan farqli o'laroq, o'zgaruvchilar va boshqaruv ketma-ketliklari (bitta istisno bilan) ichiga kiritilgan. yagona tirnoq, ishlov berilmaydi. Bu ular oddiy qator belgilar sifatida talqin qilinishini anglatadi:

$son = 10; echo "Raqam: $num
Dollar belgisi: \$";

Bitta qo'shtirnoq ichiga olingan qatorda bitta qo'shtirnoqdan foydalanish imkoniyatiga ega bo'lish uchun ularni teskari chiziq (\") yordamida chetlab o'tish kerak. Agar teskari chiziqning o'zini yozish kerak bo'lsa, uni takrorlash kerak (\\):

Echo "Ichkarida \"yagona\" tirnoqlardan foydalaning"; echo "Teskari chiziq: \\";

Bitta tirnoq ichiga olingan satrlar ikki tirnoqli belgilarni o'z ichiga olishi mumkin:

Echo "Ikkita tirnoq: "";

Heredok sintaksisi

Heredok sintaksisi muqobil yo'l yozuv satrlari.

Heredoc sintaksisi yordamida aniqlangan qator qo'sh tirnoq ichiga olingan qator bilan bir xil ishlaydi. Heredok va qo'sh tirnoqli satr o'rtasidagi farq shundaki, Heredok bilan qo'sh tirnoqlardan qochishning hojati yo'q.

Heredok sintaksisi uchta belgidan boshlanadi<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. To'g'ridan-to'g'ri identifikatordan keyin yangi qator bo'lishi kerak, identifikatordan keyin yangi qatordan boshqa belgilar bo'lmasligi kerak, aks holda xatolik yuzaga keladi; Keyinchalik satr tarkibining o'zi keladi. Satr tarkibidan keyin alohida satrda yopilish identifikatori ko'rsatilishi kerak (keyingi kabi<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Nowdoc sintaksisi

Nowdoc sintaksisi, Heredok singari, satrlarni yozishning muqobil usulidir.

Nowdoc sintaksisi yordamida aniqlangan satr bitta tirnoq ichiga olingan qator bilan bir xil ishlaydi. Nowdoc va bitta tirnoqli satr o'rtasidagi farq shundaki, Nowdoc bilan bitta tirnoqdan qochishning hojati yo'q.

Nowdoc sintaksisi Heredokga o'xshaydi, yagona farq shundaki, ochilish identifikatori bitta tirnoq ichiga olinishi kerak:

$son = 10; aks-sado<<<"some_id" Число: $num some_id;

Stringlarda o'zgaruvchilar bilan ishlash

Satrlardagi o'zgaruvchilar bilan ishlash uchun ikki xil sintaksis mavjud: oddiy Va qiyin.

Oddiy sintaksis- bu o'zgaruvchining nomi satrda ko'rsatilgandek ko'rsatilganda.

Tarjimon dollar belgisiga duch kelganda, u barcha keyingi belgilar o'zgaruvchi nomidagi haqiqiy belgilar yoki yo'qligini ketma-ket tekshirishni boshlaydi. Shunday qilib, haqiqiy o'zgaruvchi nomini yaratish uchun u iloji boricha ko'proq belgilarni oladi:

$str = "Dunyo!"; echo "Salom $str";

Murakkab sintaksis- bu o'zgaruvchi nomi jingalak qavslar ichiga olinganda.

O'zgaruvchini satrda qayta ishlash uchun tarjimon iloji boricha ko'proq belgilarni ushlaganligi sababli, tarjimon o'zgaruvchi nomi qayerda tugashini mustaqil ravishda aniqlay olmaydigan holatlar mavjud:

$sport1 = "bo'ladi"; $sport2 = "oyoq"; echo "Menga $sport1ball va $sport2ball yoqadi";

Bunday holda, istalgan natijaga erishilmaydi, chunki tarjimon $sport1 ni mavjud bo'lmagan $sport1bol o'zgaruvchi nomining bir qismi deb hisoblaydi.

Tarjimonga oʻzgaruvchi nomi qayerda tugashini aniq aytish uchun oʻzgaruvchi nomini jingalak qavslar ichiga olish kerak:

$sport1 = "bo'ladi"; $sport2 = "oyoq"; echo "Menga ($sport1)bol va ($sport2)bol yoqadi.";

Dollar belgisi jingalak qavsdan oldin yoki keyin joylashtirilishi mumkin:

$sport1 = "bo'ladi"; $sport2 = "oyoq"; echo "Menga $(sport1)bol va ($sport2)bol yoqadi.";

Birlashtirish

Birlashtirish - bu ikki yoki undan ortiq qatorlarni bitta kattaroq qatorga birlashtirish. Birlashma - bog'lash operatori yordamida sodir bo'ladi. (nuqta). Birlashtirganda, har bir keyingi qator avvalgisining oxiriga qo'shiladi:

Satr bilan birlashtirilgan har qanday turdagi qiymat bilvosita satrga aylantiriladi va keyin birlashtiriladi:

"; echo "Raqam: " . 1; ?>

Izoh: 64-bitli platformalarda PHP 7.0.0 da 32-bitli tizimlarda liniya uzunligi boʻyicha erishish mumkin boʻlgan cheklovlar yoʻq va PHP ning oldingi versiyalarida liniyalar 2 GB (2147483647 bayt) dan katta boʻlishi mumkin emas.

Sintaksis

Satrni to'rt xil usulda aniqlash mumkin:

  • yagona tirnoq
  • qo'sh tirnoq
  • nowdoc sintaksisi (PHP 5.3.0 dan beri)

Yagona tirnoq

Satrni aniqlashning eng oddiy usuli uni bitta tirnoq ichiga olishdir (belgi " ).

Satr ichida bitta qo'shtirnoqdan foydalanish uchun undan teskari chiziq bilan qoching ( \ ). Agar siz teskari chiziqning o'zini yozishingiz kerak bo'lsa, uni takrorlang ( \\ ). Teskari chiziqdan boshqa barcha foydalanish oddiy belgilar sifatida talqin qilinadi: bu shuni anglatadiki, agar siz boshqa qochish ketma-ketliklaridan foydalanmoqchi bo'lsangiz, masalan, \r yoki \n, ular har qanday maxsus xatti-harakatlar o'rniga xuddi shunday chiqariladi.

aks-sado "Bu oddiy qator";

aks-sado "Siz qatorlarga ham kiritishingiz mumkin
bu kabi yangi qator belgisi,
Bu yaxshi"
;

// Natijalar: Arnold bir marta aytdi: "Men qaytaman"
aks-sado "Bir kuni Arnold: "Men qaytaman" dedi.;

Echo "C:\\*.*-ni o'chirib tashladingizmi?";

// Chiqishlar: C:\*.*-ni o'chirib tashladingizmi?
echo "C:\*.*-ni o'chirib tashladingizmi?" ;

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

// Chiqishlar: $expand va $either oʻzgaruvchilar kengaytirilmagan
aks-sado "$expand va $o'zgaruvchilar kengaytirilmagan";
?>

Ikkita tirnoq

Agar satr qo'sh tirnoq (") ichiga olingan bo'lsa, PHP quyidagi maxsus belgilar qochish ketma-ketligini taniydi:

Qochish ketma-ketligi
Keyingi ketma-ketlik Ma'nosi
\n yangi qator (ASCII da LF yoki 0x0A (10))
\r vagonni qaytarish (ASCIIda CR yoki 0x0D (13))
\t gorizontal yorliq (HT yoki ASCIIda 0x09 (9))
\v vertikal yorliq (ASCII da VT yoki 0x0B (11)) (PHP 5.2.5 dan beri)
\e qochish belgisi (ASCIIda ESC yoki 0x1B (27)) (PHP 5.4.4 dan beri)
\f sahifa tasmasi (FF yoki ASCIIda 0x0C(12)) (PHP 5.2.5 dan beri)
\\ teskari chiziq
\$ dollar belgisi
\" qo'sh tirnoq
\{1,3} baytga sig'ish uchun jimgina oshib ketadigan sakkizlik belgining muntazam ifodasiga mos keladigan belgilar ketma-ketligi (masalan, "\400" === "\000")
\x(1,2) o‘n oltilik sistemadagi belgining muntazam ifodasiga mos keladigan belgilar ketma-ketligi
\u(+) UTF-8 ko'rinishidagi satrga mos keladigan Unicode belgilar muntazam ifodasiga mos keladigan belgilar ketma-ketligi (PHP 7.0.0 da qo'shilgan)

Bitta qo'shtirnoq ichiga olingan qatorda bo'lgani kabi, har qanday belgidan qochish ham qochish belgisini chiqaradi. PHP 5.1.1 dan oldin, teskari qiyshiq chiziq \($var) nashr etilmagan.

Heredok

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

Chiziq kerak yopilish identifikatori bilan boshlang, ya'ni. u satrning birinchi ustunida ko'rinishi kerak. Bundan tashqari, identifikator PHP-dagi barcha boshqa teglar kabi nomlash qoidalariga amal qilishi kerak: faqat harf-raqamli belgilar va pastki chiziqdan iborat bo‘lishi va raqam bilan boshlanmasligi kerak (pastki chiziqqa ruxsat beriladi).

Diqqat

Shuni ta'kidlash juda muhimki, yopilish identifikatori qatorida nuqta-verguldan tashqari boshqa belgilar bo'lmasligi kerak ( ; ). Bu id degan ma'noni anglatadi chekinmasligi kerak nuqtali verguldan oldin yoki keyin bo'sh joy yoki yorliq bo'lmasligi kerak. Shuni ham tushunish kerakki, yopilish identifikatoridan oldingi birinchi belgi operatsion tizimingiz tomonidan belgilangan yangi qator belgisi bo'lishi kerak. Misol uchun, UNIX tizimlarida, shu jumladan macOS, bu \n. Yopuvchi identifikatordan so'ng darhol yangi qator ham boshlanishi kerak.

Agar bu qoida buzilgan bo'lsa va yopish identifikatori "toza" bo'lmasa, yopilish identifikatori yo'q deb taxmin qilinadi va PHP uni yanada izlashda davom etadi. Agar bu holda to'g'ri yopish identifikatori hech qachon topilmasa, u skript oxiridagi satr raqami bilan tahlil qilish xatosini keltirib chiqaradi.

1-misol Noto'g'ri sintaksisga misol

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

2-misol To'g'ri sintaksisga misol

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

Heredoc-dan sinf maydonlarini ishga tushirish uchun ishlatib bo'lmaydi.

PHP 5.3 dan boshlab, bu cheklov faqat o'zgaruvchilarni o'z ichiga olgan heredoks uchun amal qiladi.

Heredok matni o'zini qo'sh tirnoq ichidagi satrga o'xshab, ularsiz ishlaydi.

Bu shuni anglatadiki, siz heredocdagi tirnoqlardan qochishingiz shart emas, lekin siz hali ham yuqoridagi qochish ketma-ketliklaridan foydalanishingiz mumkin.<<O'zgaruvchilar qayta ishlanadi, lekin siz heredoc ichida murakkab o'zgaruvchilardan foydalanishda strings bilan ishlashda bo'lgani kabi ehtiyot bo'lishingiz kerak.
3-misol Heredok string ta'rifiga misol
$str =
Misol qatori,

bir nechta qatorlarni qamrab oladi,
{
Heredoc sintaksisidan foydalanish.
EOD;

Sinf foo
{
var $foo ;
var $bar ;
}
}

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

$ bu -><<$foo = yangi foo(); .
$name = "Ism" ;
aks-sado .
Mening ismim "$name". Men $foo -> foo yozaman
EOT;
?>

Endi men xulosa qilyapman

($foo -> bar [ 1 ])

Bu "A" bosh harfini chiqarishi kerak: \x41

Mening ismim "Ism". Men Foo yozaman. Endi men Bar2 ni chiqaraman. Bu "A" bosh harfini chiqarishi kerak: A

Funktsiya argumentlari orqali ma'lumotlarni uzatish uchun heredoc sintaksisidan foydalanish ham mumkin:
5.3.0 versiyasidan boshlab, heredoc sintaksisidan foydalanib, statik o'zgaruvchilar va sinf xususiyatlarini/konstantalarini ishga tushirish mumkin bo'ldi:
{
Misol #5 Statik o'zgaruvchilarni ishga tushirish uchun heredocdan foydalanish<<// Statik o'zgaruvchilar
foo funksiyasi()
}

statik $bar =
Bu erda hech narsa yo'q ...
{
LABEL;<<// Konstantalar/sinf xususiyatlari
sinf foo

const BAR =<<Konstantadan foydalanishga misol
sinf foo
}
?>

FOOBAR;

Umumiy $baz =

Maydondan foydalanishga misol PHP 5.3.0 dan boshlab, siz Heredoc identifikatorini qo'sh tirnoq bilan ham o'rashingiz mumkin: Nowdoc qayta ishlash uchun mo'ljallanmagan matn blokini e'lon qilish orqali.

Nowdoc xuddi shu ketma-ketlik bilan ko'rsatilgan <<< , bu heredoc-da qo'llaniladi, lekin quyidagi identifikator bitta qo'shtirnoq ichiga olingan, masalan, <<<"EOT" .

Heredoc identifikatorlariga taalluqli barcha shartlar, ayniqsa, yopilish identifikatoriga taalluqli bo'lganlar nowdoc uchun ham amal qiladi.

$ bu -><<<"EOD"
7-misol Nowdoc-dan foydalanishga misol
Misol matn,
bir necha qatorlarni qamrab oladi
nowdoc sintaksisidan foydalanish. Teskari chiziqlar har doim tom ma'noda ishlanadi,
masalan, \\ va \".

EOD;

Ushbu misolni ishga tushirish natijasi:

Nowdoc sintaksisidan foydalangan holda bir nechta qatorli matnga misol. Teskari chiziqlar har doim \\ va \" kabi tom ma'noda ko'rib chiqiladi.

8-misol Nowdoc qatori oʻzgaruvchilar bilan iqtibos keltiruvchi misol
Bu erda hech narsa yo'q ...
{
/* Oʻzgaruvchilar bilan murakkabroq misol. */
ommaviy $foo ;

Sinf foo
{
var $foo ;
umumiy $bar ;
}
}

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

$ bu -><<<"EOT"
$this -> bar = array("Bar1" , "Bar2", "Bar3" );
Mening ismim "$name". Men $foo->foo ni chop etaman.
Endi men chop etaman ($foo->bar).
EOT;
?>

EOD;

Bu "A" bosh harfini chiqarmasligi kerak: \x41

Mening ismim "$name". Men $foo->foo ni chop etaman. Endi men chop etaman ($foo->bar). Bu "A" bosh harfini chiqarmasligi kerak: \x41

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

Izoh:

9-misol Statik ma'lumotlardan foydalanishga misol

nowdoc yordami PHP 5.3.0 da qo'shildi.

O'zgaruvchilar bilan ishlash

Agar satr qo'sh tirnoq ichida yoki heredoc yordamida ko'rsatilgan bo'lsa, uning ichidagi o'zgaruvchilar qayta ishlanadi. Sintaksisning ikki turi mavjud: oddiy va murakkab. Oddiy sintaksis osonroq va qulayroq. Bu o'zgaruvchini, massiv qiymatini qayta ishlashga imkon beradi ( massiv) yoki ob'ekt xususiyatlari (

ob'ekt

) minimal harakat bilan.

Murakkab sintaksisni ifoda atrofidagi jingalak qavslar orqali aniqlash mumkin. $ Oddiy sintaksis

Agar tarjimon dollar belgisiga duch kelsa (

), u haqiqiy o'zgaruvchi nomini yaratish uchun iloji boricha ko'proq belgilarni oladi. Agar siz nomning oxirini belgilamoqchi bo'lsangiz, o'zgaruvchi nomini jingalak qavslar ichiga kiriting.

$juice = "olma" ;
echo "U $juice sharbatini ichdi." . PHP_EOL;

// noto'g'ri. "s" o'zgaruvchi nomi uchun haqiqiy belgidir, lekin o'zgaruvchi $juice deb ataladi.
echo "U $juicesdan tayyorlangan sharbat ichdi." ;
?>

EOD;

// To'g'ri. O'zgaruvchi nomining oxiri qavslar yordamida qat'iy ravishda ko'rsatilgan:

echo "U $( sharbat ) s dan tayyorlangan sharbat ichdi." ; Sintaksisning ikki turi mavjud: oddiy va murakkab. U bir oz olma sharbatini ichdi. dan tayyorlangan sharbat ichdi. Olmadan tayyorlangan sharbat ichdi. massiv Massiv elementi ( ] ) indeks ta'rifining tugashini bildiradi. Oddiy o'zgaruvchilar bilan bir xil qoidalar ob'ekt xususiyatlariga nisbatan qo'llaniladi.

10-misol Oddiy sintaksis misoli

aniqlang ("KOOLAID", "koolaid1");
$juices = massiv("olma" , "apelsin" , "koolaid1" => "binafsha" );

echo "U bir oz $juices [ 0 ] sharbat ichdi." . PHP_EOL;
echo "U bir oz $juices [ 1 ] sharbat ichdi." . PHP_EOL;
echo "U bir oz $juices [ koolaid1 ] sharbat ichdi." . PHP_EOL;

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

Umumiy $smit = "Smit" ;
}

$odamlar = yangi odamlar();

echo "$people -> Jon bir oz $juices [ 0 ] sharbat ichdi." . PHP_EOL;
echo " $people -> John keyin $people -> Jeynga salom aytdi." . PHP_EOL;
echo "$people -> Jonning xotini $people -> robert bilan salomlashdi." PHP_EOL;
echo " $people -> robert ikki $people -> Smitsga salom berdi." ; // Ishlamaydi
?>

EOD;

U bir oz olma sharbatini ichdi. U apelsin sharbatini ichdi. U bir oz binafsha sharbat ichdi. Jon Smit olma sharbatini ichdi. Keyin Jon Smit Jeyn Smitga salom aytdi. Jon Smitning rafiqasi Robert Paulsen bilan salomlashdi.

PHP 7.1.0 qo'shimcha qo'llab-quvvatlash salbiy raqamli indekslar.

11-misol Salbiy raqamli indekslar

$string = "string" ;
aks-sado "-2 indeksidagi belgi ga teng$string [- 2 ] ." , PHP_EOL ;
$string [- 3 ] = "o" ;
aks-sado "-3 pozitsiyasidagi belgini "o" ga o'zgartirish quyidagi qatorni hosil qiladi:$string." , PHP_EOL;
?>

EOD;

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

Murakkabroq narsa uchun murakkab sintaksisdan foydalaning.

Murakkab (jingalak) sintaksis

U tushunish qiyinligi uchun emas, balki murakkab iboralarni qo'llash imkonini bergani uchun murakkab deb ataladi.

Har qanday skalyar o'zgaruvchi, massiv elementi yoki satrga moslashtirilgan ob'ekt xususiyati ushbu sintaksis yordamida satrda ifodalanishi mumkin. Shunchaki iborani chiziqdan tashqarida bo'lgani kabi yozing va keyin uni o'rang { Va } . beri { qochib bo'lmaydi, bu sintaksis faqat qachon tan olinadi $ bevosita kuzatib boradi { . Foydalanish {\$ chop etish {$ .

Bir nechta yorqin misollar:
// Barcha xatolarni ko'rsatish

xato_hisoboti (E_ALL);

$buyuk = "ajoyib" ;
// Ishlamaydi, chiqadi: Bu (ajoyib)

echo "Bu ($buyuk)" ;
// Ishlar, natijalar: Bu ajoyib

echo "Bu ($buyuk)" ;
aks-sado // Ishlar“Bu maydon keng

( $square -> eni ) 00 santimetr." ;
echo "Bu ishlaydi: ( $arr [ "key" ]) " ;

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

// Bu $foo tashqarisidagi kabi sabablarga ko'ra yaroqsiz
// qatorlar. Boshqacha qilib aytganda, u hali ham ishlaydi,
// lekin PHP birinchi navbatda doimiy foo ni qidirganligi sababli, bu sabab bo'ladi
// darajadagi xatolik E_NOTICE (aniqlanmagan doimiy).
aks-sado "Bu noto'g'ri:( $arr [ foo ][ 3 ]) " ;

// Ishlar. Ko'p o'lchovli massivlarni ichkarida ishlatganda
// chiziqlar har doim jingalak qavslardan foydalanadi
echo "Bu ishlaydi: ( $arr [ "foo" ][ 3 ]) " ;

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

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

aks-sado "Bu nom berilgan o'zgaruvchining qiymati$name : ($( $name )) " ;

aks-sado "Bu getName() qaytaradigan oʻzgaruvchi nomining qiymati:($( getName ())) " ;

aks-sado "Bu \$object->getName() qaytaradigan nom bo'yicha o'zgaruvchining qiymati:($( $object -> getName ())) " ;

// Ishlamaydi, chiqadi: getName() nima qaytaradi: (getName())
aks-sado “GetName() funksiyasini qaytaradigan narsa: (getName())”;
?>

Ushbu sintaksis yordamida satrlar ichidagi ob'ekt xususiyatlariga kirish ham mumkin.

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

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

EOD;

Men barman. Men barman.

Izoh:

Funktsiyalar, usul chaqiruvlari, statik sinf o'zgaruvchilari va sinf konstantalari ichki ishlaydi {$} , PHP dan boshlab 5. Biroq, taqdim etilgan qiymat o'zgaruvchi nomi sifatida u aniqlangan qator bilan bir xil kontekstda ko'rib chiqiladi. Yagona jingalak qavslardan foydalanish ( {} ) funktsiyalar, usullar, sinf konstantalari yoki statik sinf o'zgaruvchilari qiymatlariga kirish uchun ishlamaydi.

Bir nechta yorqin misollar:
// Barcha xatolarni ko'rsatish

sinf pivolari (
const softdrink = "rootbeer" ;
umumiy statik $ale = "ipa" ;
}

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

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

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

Satrdagi belgiga kirish va o'zgartirish

Satrlardagi belgilarni satrning boshidan boshlab, noldan boshlab, kvadrat qavslar ichida satrdan keyin belgilash orqali foydalanish va o'zgartirish mumkin, masalan, $str . Bu maqsad uchun satrni belgilar qatori sifatida tasavvur qiling. Va Agar siz 1 dan ortiq belgini olishingiz yoki almashtirishingiz kerak bo'lsa, funksiyalardan foydalanishingiz mumkin.

Izoh: PHP 7.1.0 dan boshlab salbiy ofset qiymatlari qo'llab-quvvatlanadi. Ular chiziq oxiridan ofsetni belgilaydilar. Ilgari salbiy ofsetlar darajadagi xatolikka sabab bo'lgan E_NOTICE o'qishda (bo'sh satrni qaytarish) yoki E_OGOHLANTIRISH

Izoh: yozayotganda (satrni o'zgarishsiz qoldirib).

Diqqat

Satrdagi belgiga jingalak qavslar yordamida ham kirish mumkin, masalan, $str(42) . o'qishda (bo'sh satrni qaytarish) yoki Chiziq chegarasidan tashqaridagi ofsetga yozishga urinish satrni shu ofsetgacha bo'lgan bo'shliqlar bilan to'ldiradi. Butun son bo'lmagan turlar butun sonli turlarga aylantiriladi.

Diqqat

Noto'g'ri ofset turi darajadagi xatolikka olib keladi

Izoh: .

Belgilangan satrning faqat birinchi belgisi ishlatiladi.

PHP 7.1.0 dan boshlab, bo'sh qatorni belgilash halokatli xatolikka olib keladi. Ilgari, bu holatda, nol bayt (NULL) tayinlangan.
PHPdagi satrlar baytlarning ichki massivlaridir. Natijada, ofsetda satrga kirish yoki o'zgartirish ko'p baytli kodlash xavfsiz emas va faqat ISO-8859-1 kabi bir baytli kodlashdagi satrlar bilan amalga oshirilishi kerak.
PHP 7.1.0 bo'lganligi sababli, bo'sh indeksdan foydalanish halokatli xatoga olib keladi, bu holda satr ogohlantirishsiz massivga aylantirildi;

12-misol Ba'zi misol qatorlari
// 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." ;

?>

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

$str [ strlen ($str )- 1 ] = "e" ;

PHP 5.4 dan boshlab, satrdagi ofset butun son yoki raqamlarni o'z ichiga olgan qator sifatida ko'rsatilishi kerak, aks holda ogohlantirish beriladi. Ilgari ofset kabi qator bilan berilgan

"foo"
, ogohlantirishsiz aylantirildi

13-misol 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" ]));

Izoh:

Boshqa turdagi o'zgaruvchilarga (ma'lum interfeyslarni amalga oshiradigan massivlar yoki ob'ektlar bundan mustasno) kirishga urinish yoki {} indamay qaytadi NULL.

Izoh:

PHP 5.5 sintaksisi yordamida satr harflaridagi belgilarga kirish uchun qo'shimcha yordam berdi yoki {} .

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

Asosiy funktsiyalar string funktsiyalari bo'limida tasvirlangan va kengaytirilgan qidirish va almashtirish uchun Perl-mos keladigan muntazam ifoda funktsiyalari.

Stringga aylantirish

Qiymat cast yordamida satrga aylantirilishi mumkin (tor), yoki funksiyalar strval(). aks-sado yoki Satr talab qilinadigan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi. Bu funksiyalardan foydalanganda sodir bo'ladi chop etish.

, yoki oʻzgaruvchining qiymati satr bilan solishtirilganda. Qo'llanmaning Turlar va Turlarni manipulyatsiya qilish bo'limlarini o'qib chiqish quyidagilarni aniqroq qiladi. Shuningdek qarang settype() Massivlar har doim satrga aylantiriladi Sintaksisning ikki turi mavjud: oddiy va murakkab."massiv" aks-sado yoki Satr talab qilinadigan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi., shuning uchun siz massiv tarkibini ko'rsatolmaysiz ( ), foydalanish unda nima borligini ko'rish uchun. Bitta elementni ko'rish uchun shunga o'xshash narsadan foydalaning

echo $arr["foo"] . Barcha tarkibni qanday ko'rsatish/ko'rish bo'yicha maslahatlar uchun pastga qarang. Tur o'zgaruvchisini aylantirish uchun "Ob'ekt" turida

ip NULL __toString sehrli usuli qo'llaniladi.

Ma'nosi har doim bo'sh satrga aylantiriladi. Va Yuqorida ko'rib turganingizdek, massivlarni, ob'ektlarni yoki resurslarni satrga to'g'ridan-to'g'ri aylantirish qiymatlarning o'zlari haqida ularning turlaridan boshqa hech qanday foydali ma'lumot bermaydi..

Nosozliklarni tuzatish uchun qiymatlarni chiqarishning eng yaxshi usuli bu funksiyalardan foydalanishdir print_r().

var_dump()

PHP-dagi aksariyat qiymatlar doimiy saqlash uchun satrga aylantirilishi mumkin. Bu usul serializatsiya deb ataladi va funksiya yordamida amalga oshirilishi mumkin

serialize() Satrlarni raqamlarga aylantirish Agar satr raqamli qiymat sifatida tan olinsa, natijada olingan qiymat va tur quyidagicha aniqlanadi. Agar satrda ".", "e" yoki "E" belgilari bo'lmasa va raqamning qiymati butun sonlar (belgilangan) chegarasiga to'g'ri kelsa. PHP_INT_MAX ), satr butun son sifatida tan olinadi ().

Qiymat satrning boshlanishi bilan belgilanadi. Agar chiziq haqiqiy raqamli qiymatdan boshlansa, bu qiymat ishlatiladi. Aks holda qiymat 0 (nol) bo'ladi. To‘g‘ri raqamli qiymat bir yoki bir nechta raqam (u o‘nli kasrni o‘z ichiga olishi mumkin), ixtiyoriy ravishda oldidan belgi va ixtiyoriy ko‘rsatkichdan iborat. Ko'rsatkich "e" yoki "E" dan keyin bir yoki bir nechta raqamdan iborat.

$foo = 1 + "10,5" ; // $foo - float (11.5)
$foo = 1 + "-1.3e3" ; // $foo - suzuvchi (-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 cho'chqalar" ; // $foo - bu float (14.2)
$foo = "10,0 cho'chqa" + 1 ; // $foo suzuvchi (11)
$foo = "10,0 cho'chqa" + 1,0 ; // $foo suzuvchi (11)
?>

Ushbu konvertatsiya haqida qo'shimcha ma'lumot olish uchun Unix hujjatlaridagi strtod(3) bo'limiga qarang.

Agar siz ushbu bo'limdagi misollardan birini sinab ko'rmoqchi bo'lsangiz, nima sodir bo'lishini ko'rish uchun uni va quyidagi qatorni nusxalang va joylashtiring:

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

Belgining kodini butun songa aylantirish orqali olishni kutmang (masalan, C da). Belgilarni ASCII kodlariga va orqaga aylantirish uchun funksiyalardan foydalaning ord() Va chr().

String turini amalga oshirish tafsilotlari

7 yil oldin

Hujjatlarda aytilmagan, lekin heredok oxiridagi yopilish nuqtali vergul haqiqiy nuqtali vergul sifatida talqin qilinadi va shuning uchun ba'zida sintaktik xatolarga olib keladi.

$foo =<<abcd
OXIRI;
?>

Bunga quyidagilar kirmaydi:

foo (<<abcd
OXIRI;
);
// sintaksis xatosi, kutilmagan ";"
?>

Nuqtali vergulsiz u yaxshi ishlaydi:

foo (<<abcd
OXIRI
);
?>

3 yil oldin

Siz char qatori kabi satrdan foydalanishingiz mumkin (masalan, C)

$a = "String massivi testi";

var_dump($a);
// Qaytish satri (17) "String massivi testi"

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

// -- massivni taqsimlash bilan --
var_dump((massiv) $a);
// Massivni (1) qaytarish ( => string (17) "String massivi testi")

var_dump((massiv) $a);
// Qaytish satri (17) "S"

Norixiori

15 yil oldin

Ob'ekt xususiyatlari va ob'ekt usullarining qiymatini satr ichiga qo'yish uchun murakkab sintaksisdan foydalanishingiz mumkin. Masalan...
sinf testi (
umumiy $bir = 1 ;
davlat funktsiyasi ikki() (
qaytish 2;
}
}
$test = yangi test();
echo "foo ( $test -> bir ) bar ( $test -> ikkita ()) " ;
?>
"foo 1 bar 2" chiqaradi.

Biroq, buni nom maydonidagi barcha qiymatlar uchun qila olmaysiz. Sinf konstantalari va statik xususiyatlar/usullar ishlamaydi, chunki murakkab sintaksis "$" ni qidiradi.
sinf testi (
const ONE = 1;
}
echo "foo (Test::ONE) bar" ;
?>
Bu "foo (Test:: one) bar" chiqaradi. Doimiy va statik xususiyatlar satrni buzishni talab qiladi.

3 yil oldin

Ehtiyot bo'ling, "Stringni raqamlarga aylantirish" bilan mos keladi:

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

// Bir tomoni raqam bo'lganligi sababli, satr noto'g'ri intstr dan int ga o'zgartiriladi va u test raqamiga mos keladi.

// if va switch iboralari kabi barcha shartlar uchun rost (ehtimol, while sikllari ham)!

// Bu faqat butun sonni kutish va sinovdan o'tkazishda foydalanuvchi ma'lumotlarini sinab ko'rish/foydalanish/saqlashda katta xavfsizlik xavfi bo'lishi mumkin.

// Ko'rinishidan, yagona tuzatish 123 ning "123" qatori bo'lishidir, shuning uchun hech qanday konvertatsiya bo'lmaydi.

?>

6 yil oldin

Satrlardagi bosh nollar (eng kam hayratlanarli) sakkizlik deb hisoblanmaydi.
Ko'rib chiqing:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x - $x, y - $y"; // "x 123, y 83" ni chop etadi
boshqa so'zlar bilan aytganda:
* manba kodidagi raqamli harflardagi bosh nollar "sakkizlik" deb talqin qilinadi, c.f. strtol().
* satrlardagi bosh nollar (masalan, foydalanuvchi tomonidan taqdim etilgan maʼlumotlar), butun songa (toʻgʻridan-toʻgʻri yoki aniq) oʻtkazilganda eʼtiborga olinmasa va oʻnlik son sifatida qabul qilinadi, c.f. strtod().

10 yil oldin

Ikki tirnoqli satrlar va geredoklarga jingalak qavslar sintaksisida o'zboshimchalik bilan ifodalarni, jumladan, doimiylar va boshqa funktsiya chaqiruvlarini o'z ichiga olishiga ruxsat berishning oson usuli:

// Hack deklaratsiyasi
_expr funksiyasi ($v ) ($v ; ni qaytarish)
$_expr = "_expr" ;

// Bizning o'yin maydonchasi
aniqlash ("qwe" , "asd");
aniqlash("zxc", 5 );

$a= 3 ;
$b= 4 ;

funktsiyasi c($a, $b) (qaytish$a+ $b; }

// Foydalanish
aks-sado"oldin{ $_expr(1 + 2 )} post\n"; // "3 postdan oldingi" chiqadi
aks-sado"oldin{ $_expr(qwe)} post\n"; // "pre asd post" chiqadi
aks-sado"oldin{ $_expr(c($a, $b)+ zxc* 2 )} post\n"; // "17 postdan oldingi" chiqadi

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

2 yil oldin

Menimcha, ma'lumot hech bo'lmaganda PHP saytining o'ng sahifasida paydo bo'lishi uchun ushbu sharhni qo'shish foydali bo'ladi.

Esda tutingki, agar siz assotsiativ kalit bilan ikki tirnoqli satrdan foydalanmoqchi bo'lsangiz, T_ENCAPSED_AND_WHITESPACE xatosiga duch kelishingiz mumkin. Ba'zilar buni kamroq aniq xato xabarlaridan biri deb hisoblashadi.

Quyidagi kabi ifoda:

$ meva=massiv(
"a"=> "olma",
"b"=> "banan",
//va hokazo
);

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

albatta parchalanib ketadi.

Siz buni quyidagicha hal qilishingiz mumkin:

Satr talab qilinadigan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi.“Bu a$ meva[ a] " ; // kalitni olib tashlang
Satr talab qilinadigan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi.“Bu a${ meva[ "a"]} " ; // Murakkab sintaksis
Satr talab qilinadigan iboralarda konvertatsiya avtomatik ravishda amalga oshiriladi.“Bu a{ $ meva[ "a"]} " ; // Murakkab sintaksis o'zgarishi
?>

Men oxirgi variantni afzal ko'raman, chunki u tabiiyroq va ibora satrdan tashqarida qanday bo'lishiga yaqinroq.

Nima uchun PHP ibora ichidagi bitta qo'shtirnoqni noto'g'ri talqin qilgani (hech bo'lmaganda men uchun) tushunarsiz, lekin men buni qo'shtirnoq qiymatlar qatorining bir qismi emasligi bilan bog'liq deb o'ylayman - satr allaqachon tahlil qilinayotgandan so'ng, qo'shtirnoqlar shunchaki tahlil qilinadi. yo'lda to'sqinlik qil...?

2 yil oldin

Ikkalasi ham ishlashi kerak :(

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

Jamoat funktsiyasi deng HelloStatic() {
aks-sado
"Salom:{ $bu:: $VAR} " ;
}

Jamoat funktsiyasi dengHelloConst() {
aks-sado
"Salom:{ $bu::VAR)" ; // Tahlil xatosi: sintaksis xatosi, kutilmagan ")", kutilayotgan "["
}
}

$obj= yangiSinov();
$obj-> deng HelloStatic();
$obj-> dengHelloConst();

3 yil oldin

Men boshdan kechirgan narsa, shubhasiz, kimgadir yordam beradi. . .
Mening muharririmda bu sintaksis HTML va $ commentni ajratib ko'rsatadi:

$html =<<<"EOD"
$ sharh
Misol qatori,

Buni ishlatish bir xil rangni ko'rsatadi:

$html =<<$ sharh
Misol qatori,

u bilan ishlashni ancha osonlashtiradi

11 yil oldin

Fikringizni saqlash uchun sanalar haqidagi oldingi sharhlarni o'qimang;)

Ikkala satr ham raqamlarga aylantirilishi mumkin bo'lsa (("$a" > "$b") testida), natijada olingan raqamlar ishlatiladi, aks holda TO'LIQ satrlar har bir belgi bilan taqqoslanadi:

var_dump("1.22" > "01.23" ); //bool(noto'g'ri)
var_dump("1.22.00" > "01.23.00" ); //bool(to'g'ri)
var_dump("1-22-00" > "01-23-00" ); //bool(to'g'ri)
var_dump((suzuvchi)"1.22.00" > (suzuvchi)"01.23.00" ); //bool(noto'g'ri)
?>

(PHP 4, PHP 5, PHP 7)

str_replace - Qidiruv satrining barcha holatlarini almashtirish qatori bilan almashtiradi

Tavsif

Bu funktsiya almashtirish bilan almashtirilgan mavzudagi barcha qidiruv holatlari bilan qator yoki massivni qaytaradi.

Agar murakkab qidirish/almashtirish qoidalari (masalan, oddiy iboralar) kerak bo'lmasa, ushbu funksiyadan foydalanish afzalroqdir preg_replace().

Parametrlar ro'yxati

Agar qidirish va almashtirish massivlar bo'lsa, u holda str_replace() mavzu bo'yicha qidirish va almashtirish uchun tegishli qatordagi har bir qiymatdan foydalanadi. Agar almashtirish massivida qidiruvdan kamroq elementlar bo'lsa, bo'sh satr qolgan qiymatlar uchun almashtirish qatori sifatida ishlatiladi.

Agar qidiruv massiv bo'lsa va almashtirish satr bo'lsa, u holda bu almashtirish qatori qidiruv massivining har bir elementi uchun ishlatiladi. Teskari holat hech qanday ma'noga ega emas.

Qidiruv yoki almashtirish massiv bo'lsa, ularning elementlari birinchidan oxirigacha qayta ishlanadi. Qidiruv qiymati, nomi bilan ham tanilgan igna

(igna). Bir nechta qidiruv qiymatlari uchun massivdan foydalanishingiz mumkin.

O'zgartiring

O'zgartirish qiymati qidiruv qiymatlarini almashtirish uchun ishlatiladi. Bir nechta qiymatlar uchun massivdan foydalanishingiz mumkin.

Mavzu Qidirish va almashtirish amalga oshiriladigan qator yoki massiv nomi bilan ham tanilgan pichan uyasi

(somonxona).

Agar mavzu massiv bo'lsa, u holda har bir mavzu elementida qidirish va almashtirish amalga oshiriladi va funktsiyaning natijasi ham massiv bo'ladi.

Qaytish qiymatlari

Bu funktsiya almashtirilgan qiymatlar bilan satr yoki massivni qaytaradi.

Misollar

1-misol Foydalanish misollari str_replace()

// tayinlaydi
$bodytag = str_replace ("%body%", "qora" , " " );

// tayinlaydi: Hll Wrld f PHP
$unlilar = massiv("a" , "e" , "i" , "o" , "u" , "A" , "E" , "I" , "O" , "U" );
$onlyconsonants = str_replace ($undoshlar , "" , "Hello World of PHP" );

// tayinlaydi: Siz har kuni pizza, pivo va muzqaymoq yeyishingiz kerak
$phrase = "Siz har kuni meva, sabzavot va tola iste'mol qilishingiz kerak.";
$sog'lom = massiv("mevalar" , "sabzavotlar", "tola" );
$yummy = massiv("pitsa", "pivo", "muzqaymoq");

$newphrase = str_replace($sog'lom, $yummy, $ibora);

// tayinlaydi: 2
$str = str_replace ("ll" , "" , "yaxshi golli miss Molly!" , $count );
echo $count ;
?>

2-misol Potentsial fokuslarga misollar str_replace()

// O'zgartirish buyrug'i
$str = "1-qator\n2-qator\r3-qator\r\n4-qator\n";
$tartib = massiv("\r\n" , "\n" , "\r" );
$almashtirish = "
" ;

// Ularni qayta almashtirmaslik uchun birinchi navbatda \r\n ishlov beradi.
echo $newstr = str_replace ($buyurtma, $almashtirish, $str);

// F ni chop etadi, chunki A o'rniga B, keyin B C va hokazo ...
// Natijada, E o'rniga F qo'yiladi, chunki almashtirish chapdan o'ngga sodir bo'ladi.
$search = massiv("A" , "B" , "C" , "D", "E" );
$almashtirish = massiv("B" , "C" , "D" , "E" , "F" );
$subject = "A" ;
echo str_replace ($search, $almashtirish, $mavzu);

// Chiqishlar: applerootrootnut (yuqoridagi sabablarga ko'ra)
$harflar = massiv("I", "haqida");
$fruit = massiv("olma", "yong'oq");
$text = "Men haqida" ;
$output = str_replace ($harflar, $fruit, $matn);
echo $output ;
?>

Eslatmalar

Izoh: Ushbu funktsiya ma'lumotlarni ikkilik shaklda qayta ishlash uchun xavfsizdir.

Ogohlantirish

O'zgartirish tartibi haqida eslatma

Chunki str_replace() chapdan o'ngga almashtirishni amalga oshiradi, keyin bir nechta almashtirishdan foydalanganda u ilgari kiritilgan qiymatni boshqasiga almashtirishi mumkin.

Izoh:

Ushbu sahifadagi misollarni ham ko'ring. Bu funksiya katta-kichik harflarga sezgir. Foydalanish str_ireplace()



katta-kichik harflarni sezmaydigan almashtirish uchun.

Jadvallar:
C_id | Kompaniya | Joylashuv
1 | MChJ Qidiruv | Kudykino maydoni 15/3
2 | OAJ Elita | Slunysvalinsk 133/7

3 | OAJ Pyschpyshch | Soldatodachestroyskoe 404
Ta'mirlash turi (ta'mirlash_turlari)
r_id | Ta'mirlash_turlari |
1 | Bolg'a + mixlar
2 | Go'zallik bo'yicha ko'rsatma

3 | Katta ta'mirlash
Buyurtmalar ro'yxati (ro'yxat)
l_id | Kim | Nima kerak | Vaqt | Operator izohi
1 | 1 | 2 | %vaqt tamg‘asi% | %operator_text%
2 | 2 | 1 | | %matn%

3 | 3 | 2 | | %matn%
1-jadvalda mijozlar ro'yxati keltirilgan.
3-jadvalda operativ guruhlar uchun joriy buyurtmalar ro'yxati keltirilgan. Ushbu jadval muntazam ravishda yangilanadi va uni to'ldirish uchun veb-shakl ishlatiladi. Juda ko'p buyurtmalar kelib tushayotganligi sababli, mijoz identifikatori va xizmat ko'rsatish ko'rinishidagi yozuvlar jadvalga kiritilgan.

Aslida, muammo shundaki, uchinchi jadval "buyurtma tanlash" veb-shaklida ko'rsatilishi kerak va ID o'rniga boshqa ustunlardagi tegishli maydonlarni almashtirish kerak.

Kod:
$query = "RO'YATDAN SELECT *";
$natija = mysql_query($query);
while($row=mysql_fetch_array($result. // har bir satrdan natijalarni oling)
( echo "";// ma'lumotlarni chiqarish
}




JADVAL TUZISH "jadval_nomi" ("id" int(255) NO NULL AUTO_INCREMENT, "ro'yxat" matni (80) NULL EMAS, PRIMARY KEY("id").

INSERT INTO "table_name" ("ro'yxat") VALUES ("bla-bla")



eng yaxshi javob $so'rov =
"
kompaniyalarni tanlang.Kompaniya, ta'mirlash_turlari.Repair_types, list.comment_l
ro'yxatidan
ichki qo'shilish kompaniyalari
ro'yxatda.Kim = companies.c_id
ichki birlashma ta'mirlash_turlari
ro'yxatda."Nima kerak" = repair_types.r_id
";

© 2024 ermake.ru -- Kompyuterni ta'mirlash haqida - Axborot portali