Php qatordagi o'zgarishlarni almashtirish. PHP Shabloni Wicker. Obrobka qatorlarda zminnyh

PHP, bu soatda, veb-qo'shimchalarni amalga oshirish uchun eng mashhur tillardan biridir. Tsei yoga asoslariga bag'ishlanish kursi. Zastosuvannya zdotuh novichok amaliyligiga urg'u.

PHP tili Internetning o'rtasida aniq amaliy vazifa sifatida xizmat qilish uchun yaratilgan (kursning birinchi ma'ruzasini o'qib, o'zingizni tanib olishingiz mumkin). Biz nazariy mikroskopda juda qattiq bo'lmaslikka harakat qilamiz va ma'ruzalar terisida aniq vazifani ishlab chiqishga harakat qilamiz. Ko'pgina misollar haqiqiy tizimdan olingan: informatika tarixining virtual muzeyi. Kursning birinchi qismi bunday konstruksiyalarning sintaksisi asoslarini o'rganishga bag'ishlangan. Shu sababli mijoz-server texnologiyasi PHP harakatlanuvchi trafikining asosiy sohasi hisoblanadi. Keyin keling, eng ibtidoiy, bizning fikrimizcha, vbudovannyh funktsiyalari va ularning qo'shimcha amaliy vazifalari uchun qadrlashning cho'qqisiga o'tamiz. PHP tilining ob'ekt modeli eng muhimi bo'lmasa-da, ma'lumotlarning ob'ekt modelini tasvirlashning tabiiy usuliga ega bo'lish muhimdir. Asosiy model sifatida virtual informatika muzeyi hujjati modeli ko'rib chiqiladi. Shundan so'ng, bir qator amaliy jihatlar ko'rib chiqiladi: fayl tizimiga ega robot, ma'lumotlar bazasi, qatorlar, seanslar, DOM XML - barchasi bizga amaliy film tanlashning asosiy vazifalarini ko'rib chiqishga imkon beradi.

Kitob:

PHP Shabloni Wicker

PHP Shabloni Wicker

Shablonlar nima va qanday hidlar kerak

Kino dasturlash shabloni nima? Siz shablonni o'rtadagi o'zgartirish matni deb aytishingiz mumkin. Shablonni qayta ishlash soati ostida o'zgartirilgan qiymatlarni almashtirish kerak.

Ma'ruzalardan birida biz allaqachon shablonning dumbasini ko'rib chiqdik. Bu hujjatlarni ko'rsatish uchun shablon. Koristuvach qo'shimcha html teglari uchun belgilangan matn qatorini yaratib, yangisiga maxsus metabelgilarni kiritdi (ma'nosi).), chunki bizning dasturimiz yillar davomida ma'lum elementlarning ma'nosini o'zgartirdi. Nima uchun bizga bunday shablon kerak? Masalan, dastur kodini o'zgartirmasdan hujjatni ko'rsatish uslubini o'zgartirishingiz mumkin.

Shablonlarni talab qiladigan oziq-ovqat uchun eng keng qamrovli tushuntirish quyidagicha ko'rinadi: shablonlar robot dasturlari mantiqini ma'lumotlarni taqdim etishda, loyihalashda mustahkamlash uchun kerak.

Shablonga dumba ko'rsatish eng oddiylaridan biridir. Ushbu qayta ishlash uchun uning o'rniga str_replace() almashtirish funktsiyasidan foydalaniladi. Shablonlar bilan ishlashning eng keng tarqalgan usuli bu sinf kutubxonalarini yaratishdir. At the principle of creating your own library is not obov'yazykovo, oskolki іsnuіє іsnuіch librіbіch templatіvіv, shо vіlno rozpovsudzhuyutsya, over the funktіonіstіu such pratsyuyut great kolektіv razrobnikіv, namagayutsya їх їх їніversаlії, ії ї їїєєєєє ї ї ї ї їєєєєєє ї ї ї ї í̈ í̈ í̱̱̱̈oo̱̱ Bunday kutubxonalar faoliyati bilan tanishishimiz mumkin. Ale, boshoq uchun, biz turli shablonlarni tanlashning qandaydir ko'rgazmali usulini mukammallashtirish uchun vazifani shakllantiramiz.

Otzhe, zavdannya:

Ma'lumotlar bazasida bo'lgan maqolalar ro'yxati bilan veb-sahifani yaratish kerak. Oddiylik uchun maqolani sarlavha, muallif muallifi, qisqacha abstrakt abstrakt va yangi to'liq matn o'zgarishi deb atash mumkinligini unutmang, bu tasvirlar ma'lumotlar bazasidagi matnga qaraydi yoki faylga qaraydi. Ro'yxat tashkilotlar tomonidan ayblanishi kerak, shuning uchun maqola nomiga qarshi bosilganda, so'nggi o'zgarishlar yangi asrda e'lon qilinadi.

O'zgartirish shablonlar

Oddiy almashtirish usuli, tobto yordamida bunday vazifani qanday hal qilish mumkin. Ushbu usul bilan siz hujjatlarni tahrirlash uchun qanday yozdingiz?

Ikkinchi sahifa uchun shablonni tanlash va uni shu yerda (fayldan yoki ma'lumotlar bazasida) saqlash kerak. Shubhasiz, biz barcha tomonlar uchun shablonni taxmin qila olmaymiz, chunki ma'lumotlar bazasida qancha maqola borligini bilmaymiz. Shablonda biz faqat html va metabelgilarni o'zgartirishga muvaffaq bo'ldik. Shuning uchun, biz ro'yxatning bir qatori uchun faqat shablonni yozishimiz mumkin, uni allaqachon dasturli ravishda kerakli qatorlar soniga aylantirish kerak.

  • "
    maqsad=yangi>
    ()

    Bundan tashqari, yana bir muammo bor - maqolaning so'nggi matni bo'yicha taklifni kiritish bilan. Agar biz almashtirish qoidasiga rioya qilsak (ma'lumotlar bazasidagi barcha meta-belgilarni ularning qiymatlari bo'yicha kichraytiramiz), unda siz buni bilib olishingiz mumkin.Keling, matnni emas, balki matnning o'zini kiritamiz. Shunday qilib, ushbu element uchun uni almashtirishdan oldin qo'shimcha qayta tekshirish kerak va natijada to'liq matn maydoni maqola matnini almashtiradi va uni faylga yubormaydi. Biz hayotimizni osonlashtirmaymiz va to'liq matn maydoniga fayl yuborish haqida tashvishlanishimiz shart emas. Xuddi shu vazifani quyidagicha yozishingiz mumkin:

    $li_tmpl = file_get_contents("tmpl.html");
    // fayldan qator shablonini o'qing
    // sanani belgilang va tanlang
    // ma'lumotlar bazasi
    $conn = mysql_connect("localhost",
    "nina", "123")
    yoki o'ladi ("Ulanish mumkin emas");
    mysql_select_db("kitob");
    $sql = "Maqolalardan * TANLASH";
    $q = mysql_query($sql,$conn);
    // haddan tashqari kuchli so'rov
    $num = mysql_num_rows($q);
    uchun($i=0; $i<$num; $i++){
    $tmpl. = $li_tmpl;
    $tmpl = str_replace("",
    mysql_result($q,$i,"sarlavha"),$tmpl);
    $tmpl = str_replace("",
    mysql_result($q,$i,"muallif"),$tmpl);
    $tmpl = str_replace("",
    mysql_result($q,$i,"abstrakt"),$tmpl);
    $tmpl = str_replace("",
    mysql_result($q,$i,"to'liq matn"),$tmpl);
    }
    echo $tmpl;
    ?>

    Boo shabloniga o'xshash, qalinroq joy kabi, taxminan oyoqqa olinadi.

    PHP ga kirish(Saveleva N.V.)

    Ma'ruzada PHP ning shunday tili bo'lganlar, ular uchun u o'z joyida yaratilgani va u Volodyaning bunday imkoniyatlari bilan qanday g'alaba qozonganligi haqida ma'lumot beradi.

    O'rnatilgan va sozlangan dasturiy ta'minot(Ivanov Ivan)

    Asosan, bajarish usuli oddiy va oson, ammo murakkabroq vazifalarda dasturchining qo'shimcha bilimlari yordamida pastroq qiymat oddiy. Vazifani bajarish uchun tsilih bloklarini o'rnatish bilan ishlash yoki fikrni o'zgartirish, FastTemplate va Smarty kabi shablonlar sinflarini yaratish kerak. Keling, ularning hisobotini muhokama qilaylik.

    Fast Template

    FastTemplate - shablonlardan robotni amalga oshirish imkonini beruvchi sinflar to'plami. FastTemplate shabloniga mantiq qo'shish mumkin emas, buning hammasi dastur kodining aybi. FastTemplate-da shablonlarni ishlash g'oyasi shundan iboratki, u ajoyib sahifa bo'ladimi, u shaxsiy bo'lmagan shmatochkivlardan iborat bo'lib, ulardan eng kichiki - matnning asosiy qatorlari va hidi bu ma'noni oladi. .

    FastTemplate shablon fayli nima? Bu maxsus html fayl bo'lib, unda FastTemplate sinfining usullari bilan qayta ishlanishi mumkin bo'lgan maxsus turdagi o'zgarishlardan foydalanish mumkin.

    FastTemplate shablonlarini o'zgartirish sintaksisi quyidagicha tasvirlangan: ((+))

    Tse o'zgarish jingalak kamon "(" tufayli sodir bo'lganligini anglatadi. To'lovning boshqa va keyingi belgisi A dan Z gacha bo'lgan katta harflar, raqamlar yoki akkreditatsiya belgilaridir. O'zgarish qo'shimcha jingalak kamon uchun haq olinadi. "), keyin egri.

    (TITLE)
    (AUTH20)
    (TOP_OF_PAGE)

    Aytganimizdek, FastTemplate-ning asosiy g'oyasi qo'shimcha shablon qo'shimchalari bilan tomonni yaratishdir. Masalan, vazifamizni bajarish uchun biz uchta shablon faylini yaratishimiz mumkin:


    (TITLE_)


    (asosiy)



      (LIST_ELEMENT)

  • (TITLE)
    ((MUALOR))

    (ABTRACT)

    Shablonlar biz tomonimizdan yaratilgan - Vikonali dizaynerining ishi. Endi ularni qayta ishlashni o'rganish kerak, tobto. dasturchi robotini viconate. Keling, bir vaqtning o'zida ko'proq shablonlarni qayta ishlash dasturini yarataylik.

    FastTemplate shablonlari bilan ishlashni boshlashdan oldin, ushbu sinflar to'plamini dasturimizga ulash kerak. Haqiqiy hayotda, bitta fayldagi FastTemplate yozuvlari sinflari to'plami, qoida tariqasida, men class.FastTemplate.php3 ga qo'ng'iroq qilaman, siz uni, masalan, buyruq yordamida ulashingiz mumkin:

    include("class.FastTemplate.php3");

    Haqoratli muhim trikotaj - FastTemplate sinfiga ob'ektni yaratish, negadir biz undan foydalanishimiz mumkin:

    $tpl = Yangi tez shablon(
    "/yo'l/to/shablonlar");

    Parametr bizning shablonlarimiz ma'lum bo'lgan oyga yo'lda o'tganidek.

    FastTemplate bilan ishlash uchun siz ba'zi asosiy usullarni bilishingiz kerak: aniqlash, tayinlash, tahlil qilish va FastPrint.

    usulini aniqlang

    Sintaksis:

    aniqlash(massiv (kalit => qiymat,
    key1 => qiymat1, ...))

    Define() usuli shablon fayliga qisqa nomlar bilan mos keladi, shuning uchun uni dastur bilan moslashtirish mumkin. Tobto "kalit" - tse im'ya, yak mi biz shablon fayliga yuborilgan dasturda vikoristovuvat qilamiz, uning im'yasi "qiymat" qatorida yozilgan. Aniqlash usulidan tashqari, shablon fayllarining haqiqiy nomlarini har qanday joyda o'zgartirish tavsiya etilmaydi. Define() usuli bir soat davomida chaqirilganda, barcha qo'shiq shablonlari olinadi.

    $tpl->define(massiv (asosiy => "main.tpl",
    list_f => "list.tpl",
    list_el=>"list_element.tpl"));

    Bu erda biz shablonlarning fayl nomlarining taxalluslarini o'rnatamiz. Qi taxalluslari, tobto. main, list_f va list_el ni o'zgartirish main.tpl, list.tpl va list_element.tpl-dagi turli fayl nomlarini o'zgartirish uchun dastur tomonidan o'zgartiriladi.

    usulini tayinlash

    Sintaksis:

    tayinlash ((tikish kaliti/qiymati) yoki
    (massiv (tikish kaliti/qiymati))

    assign() usuli o'zgartirilgan qiymatni, "kalit" - o'zgartirish nomini va "qiymat" - tayinlanishi kerak bo'lgan qiymatni belgilaydi. Shablonda o'zgartirilgan narsa qiymatlar bilan almashtiriladi, uni yordamchi assign() usuli uchun o'rnatish kerak. Vídpovídno to sintaksis tsey usuli ikki xil shaklda burish mumkin. FastTemplate bir nechta massivga ega, shuning uchun agar siz bir xil kalitning qiymatini qayta o'rnatsangiz, u qayta yoziladi.

    $tpl->tayinlash(massiv(
    TITLE => "O'rnatilgan va yangilangan proshivka",
    TITLE => "PHP ga kirish"));

    Bu yerda siz TITLE nomidagi shablonga fayllarda mavjud bo'lgan o'zgartirishning dvíchí qiymatini o'rnatishingiz mumkin. Tsya o'zgartirish onasi qolgan uning qiymati, tobto tayinlangan. Yutgan dorivnyu qator "Enter to PHP".

    tahlil qilish usuli

    Sintaksis:

    tahlil qilish (burilish o'zgarishi,
    dzherela shablonlari)

    parse() usuli FastTemplate-ning yuqori qismidir. Vín vstanovlyuê zmennja zminnoí̈, burish uchun scho, dzherel qiymatlaridan umumlashtirilgan shablonlarga teng. Usulni uchta shaklda burish mumkin: oddiy, omborxona va kelish.

    $tpl->parse(MAIN, "asosiy");
    // oddiy shakl
    $tpl->parse(MAIN, massiv("ro'yxat_f", "asosiy"));
    // Ombor shakli
    $tpl->parse(MAIN, ".list_el");
    // keladigan shakl

    Oddiy shaklda "asosiy" taxallusli shablon mag'lub bo'ladi (chunki hozircha takliflar mavjud emas), barcha o'zgartirishlar kiritiladi va natija MAIN variantining qiymati sifatida qabul qilinadi. Agar boshqa shablonlarda o'zgarish (MAIN) paydo bo'lsa, u qayta ishlash natijasida "asosiy" shablondan olib tashlanadigan qiymat bilan almashtiriladi. Bu sizga qo'shimcha shablonlarni yaratish imkonini beradi.

    Parse() usuli uchun ombor formasi shablonlarni bir-biriga osongina joylashtirish uchun yaratilgan. Keyingi yozuvlar ekvivalent:

    $tpl->parse(MAIN, "list_f");
    $tpl->parse(MAIN, ".main");

    xuddi shu narsa

    $tpl->parse(MAIN, massiv("ro'yxat_f", "asosiy"));

    Agar ombor shakli tanlangan bo'lsa, muhim ahamiyatga ega, shablon teridan tozalanadi, u birinchi bo'lib ro'yxatga kiritilgandan so'ng, o'zgartirishdan so'ng, ishlov berish natijalari shablonga o'tkaziladi. Ilovada asosiy o'zgarish uchun javobgardir (MAIN), undagi parchalar qayta ishlash natijalari list_f shabloniga o'tkaziladi. Agar main (MAIN) o'zgarishini almashtirmasa, list_f shabloniga nisbatan ishlov berish natijalari behuda ketadi.

    Keladigan uslub shablonni qayta ishlash natijalarini o'zgartirilgan natijaga qo'shish imkonini beradi. Shablon fayli taxallusi oldidagi nuqta FastTemplate-ga natijalarni o'zgartirishdan oldin ushbu shablonni qayta ishlash natijasini qaytarishi kerak bo'lganlar haqida xabar beradi va uning ustiga yozilmaydi. Ushbu uslub eng ko'p satrlar sonining o'zgarishi bilan jadval tuzilganda g'olib bo'ladi, shuning uchun, masalan, natijada sizdan ma'lumotlar bazasi so'raladi.

    FastPrint usuli

    Sintaksis:

    FastPrint (o'zgartirilgan o'zgarish)

    FastPrint() usuli yangi o'zgartirilgan o'zgarishlarga o'tgan yana bir usuldir. Parametrsiz qo'ng'iroqlar bo'lsa ham, qo'ng'iroqning qolgan qismi parse() usuli bilan o'zgartiriladi.

    $tpl->FastPrint();
    /* oldingi dumbani qanday davom ettirish kerak,
    u holda bu funksiya ishlamayapti
    ASOSIY */
    $tpl->FastPrint("MAIN");
    // bu funksiya ularni yaratish uchun

    Ekranda emas, masalan, faylda o'qish zarur bo'lganligi sababli, ma'lumotlarga g'amxo'rlik qilish uchun fetch () usulidan foydalanishingiz mumkin.

    $ma'lumotlar = $tpl->fetch("MAIN");
    fwrite ($fd, $ma'lumotlar); // Ma'lumotlarni faylga yozish

    FastTemplate'dagi yordam shablonlari ortidagi vazifa

    Endi biz vazifamizni yutish uchun zarur bo'lgan barcha usullarni tanlashga harakat qilamiz.

    Shuni ta'kidlash kerakki, agar muntazam almashtirish funktsiyasi g'alaba qozongan bo'lsa, vazifalarni hal qilish ko'proq katlanadigan, birinchi navbatda pastroq edi. Keyin bu erda biz uch xil shablonni o'zgartirishimiz mumkin (ko'p miqdorda hujjatlar, ro'yxatlar va ro'yxat elementlari).

    Ushbu toifadagi shablonlar PHP3 robotlari uchun PHP4 versiyasi chiqarilishidan oldin chiqariladi. Norozilik bildirish uchun uni ko'taring, siz FastTemplate sinf kutubxonasini qo'lga kiritishingiz va faylni ishchi katalogingizdan nusxalashingiz kerak. Agar siz PHP4 bilan ishlasangiz, class.FastTemplate.php3 fayliga bir nechta o'zgartirishlar kiritilishi kerak, bu haqda u kutubxona bilan bir vaqtning o'zida yetkazib beriladigan hujjatlarda yozilgan.

    Aqlli shablonlar

    Smarty o'sib borayotgan PHP loyihalaridan biri bo'lib, uning rasmiy veb-sayti http://smarty.php.net hisoblanadi. U erda siz imkon qadar ko'proq Smarty sinflarini, shuningdek, dolzarb hujjatlarni olishingiz mumkin. Shablonlarni qayta ishlash uchun ushbu sinflar to'plami qalinroq va funktsionaldir, FastTemplate pastroq. Nasampered, men adolat oldida bir xil mantiq bilan yarashmayman. Ma'lumotlarda e'tiborga olinishi kerak bo'lgan mantiq, siz shablondan foydalanishingiz mumkin, Smarty sotuvchilarni ko'rib chiqing. Shuning uchun Smarty shablonida aqlli operatorlar, fayllarni qo'shish operatorlari, o'zgartirish operatorlari, tsikllar ham bo'lishi mumkin. Smarty-ning yana bir xususiyati shablonlarni kompilyatsiya qilishdir. Shablonlar php-kodga tarjima qilinadi va qiymat o'rnatilganda PHP tarjimoni barcha kerakli qiymatlarni qayta ishlashga qodir. Ishni tezlashtirish uchun kompilyatsiya qilingan andozalar keshlanadi.

    Keling, Smarty shablon dvigatelining asosiy konstruksiyalarini ko'rib chiqaylik.

    Oʻrnatilgan

    Birinchidan, nima uchun biz g'amxo'rlik qilamiz, Smarty-ning o'rnatilishi. Bu erda hamma narsa FastTemplate'dagi kabi oddiy emas. Smarty sinf tavsifiga ega bo'lgan bitta PHP-fayldan iborat bo'lib, u turli kutubxona fayllari to'plamiga o'xshaydi. Smarty shablonlari bilan ishlash uchun siz barcha dasturlaringiz uchun mavjud kutubxonalarni yaratishingiz kerak. Hid Smarty tarqatishning /libs/ katalogida topilgan. Smarty sinfining o'zi uchun mo'ljallangan fayl Smarty.class.php deb ataladi. Smarty sinfida qaysi kutubxonalar mavjudligini tekshirish uchun siz quyidagi skriptni yozishingiz kerak:

    talab ("Smarty.class.php");
    // faylni kiriting
    // Smarty sinfining tavsifi
    $ Smarty = Yangi aqlli;
    // Smarty sinfining namunasini yarating
    ?>

    Go'yo vikonanna yogo paytida kechirim paydo bo'lgandek, quyidagi variantlardan birini sinab ko'rish kerak.

    // faylni sinf tavsifi bilan ulash
    talab ("c:/users/my/Smarty/libs/
    Smarty.class.php");
    $ Smarty = Yangi aqlli;
    // Smarty sinfining namunasini yarating
    ?>

    Kutubxonalar joylashgan katalogni include_path ga qo'shing (kodni o'zgartirishingiz shart emas).

    aniqlash("SMARTY_DIR",
    "c:/users/my/Smarty/libs/index.html");
    talab qilish(SMARTY_DIR."Smarty.class.php");
    $ Smarty = Yangi aqlli;
    ?>

    Endi biz o'zgarganimiz sababli kutubxonalar topilishi uchun Smarty roboti uchun zarur bo'lgan kataloglarni yaratish kerak, chunki aksiyalar ortida quyidagi nomlar bo'lishi mumkin:

    Shablonlar - katalog, de mi zberígatimemo yaratilgan andozalar;

    Templates_c - Smarty kompilyatsiya qilingan shablonlarni saqlaydigan katalog;

    Configs - konfiguratsiya fayllarini saqlash uchun katalog;

    Kesh - kesh uchun katalog.

    Ismlar $template_dir, $compile_dir, $config_dir, $cache_dir vakolatlari orqali Smarty sinfiga berilgan, ularni qayta ko'rib chiqish mumkin. Smarty shablonlari bilan ishlaganingiz uchun teri dasturlari uchun turli xil kataloglardan foydalanish tavsiya etiladi. Bekor qilingan kataloglarga kirish Smarty kutubxonasi tomonidan ta'minlanadi va hech qachon to'g'ridan-to'g'ri veb-brauzer orqali foydalanilmaydi. Shunday qilib, xavfsizlik bilan bog'liq muammolardan xalos bo'lish uchun www.uz orqali kirish imkoni bo'lmagan joyda kataloglarni kengaytirish yaxshidir.

    Keling, c:/smarty_dirs/book/ manzilida Smarty kataloglari ro'yxatini yarataylik. Iltimos, brauzer orqali ma'lumotlarni o'qish mumkin emasligini unutmang. Dasturimiz (yoki dasturimiz) /~my/tasks/book/ manzili bilan ma'lum bo'lsin. $compile_dir va $cache_dir Smarty kataloglari yozish huquqini talab qiladi, shuning uchun serveringiz bloklangan bo'lishi uchun kesh menejeri uchun ba'zi ruxsatlarni o'rnatishingiz kerak bo'ladi (aytaylik, www yoki hech kim).

    Norozilik bildirish uchun biz oddiy shablon va uni Smarty mexanizmiga aylantiruvchi dastur yaratamiz.

    index.tpl (є Smarty shabloni va c:/smarty_dirs/book/templates/ shablon katalogida joylashgan)

    (* Aqlli shablon *)
    Salom ($name)!

    index.php (bizning dastur kodini /~my/tasks/book/ katalogida yoki, bu borada c:/users/my/tasks/book/ katalogida topish mumkin)

    Natijada siz quyidagilarni hisobga olishingiz mumkin:

    Salom Vasya!

    Bizning dasturimiz ishlashi uchun zarur bo'lgan sozlamalar okremium fayliga o'tkazilishi va Smarty sinfining kengaytmasi sifatida tashkil etilishi mumkin.

    Asosiy sintaksis

    Smarty shunchaki shablonlarni qayta ishlash sinfi emas, u yangi shablonning maqsadini belgilaydi. Mi torknemosya asosiy yoga elementlaridan kamroq. Otzhe, Smarty shabloni nima? Maxsus konstruktsiyalar to'plami (o'zgartirish, chaqirish funktsiyalari va usullari) va html teglari. Smarty filmi shablonlarining elementlari (teglari) belgilar-ajratgichlar orasiga joylashtirilgan. Aktsiyalar uchun "(" bu ")" jingalak kamon belgilari mavjud, ammo siz ularni o'zgartirishingiz mumkin. Bunday muhitda saqlanmaydigan har bir narsa, Smarty qayta ishlashni talab qilmaydigan doimiyga o'xshaydi. Yuqorida joylashgan index.tpl shabloni uchun ($name) o'zgartiriladi va "Salom" qatorlari "!" - shablonni qayta ishlash jarayonida o'zgartirilmaydigan konstantalar.

    Smarty-dagi sharhlar ikki yulduz o'rtasida yozilgan:

    (* Izoh bering. Shablonni qayta ishlashdan keyin
    VIN ekranda ko'rinmaydi *)

    Skin Smarty tegi yoki o'zgarish qiymatini ko'rsating yoki funksiyani chaqiring. Funktsiya quyidagicha yozilgan:

    (funksiya_nomi atributi1="qiymat1"
    atribut2="qiymat2")

    O'zgartirilgan shablonlarda stiker turlari bo'lishi mumkin:

    O'zgarish, koristuvachning php-skripti tomonidan umid qilinadigan narsaning ma'nosi, ularning oldida dollar belgisi uchun ona mas'uldir.

    Masalan: ($first_ism)

    Qiymati koristuvachning php-skriptida tayinlangan massivning elementlari qo'shimcha sintaksis uchun shablonda mavjud ($im'ya_array.associative_key).

    Masalan: ($person.familiya)

    Assotsiativ bo'lmagan massivning elementlari kvadrat yoy sintaksisi yordamida mavjud: (im'ya_array[raqam_indeks])

    Masalan: ($person)

    Qo'shimcha sintaksis uchun shablonda mavjud php-skriptda o'rnatilgan ob'ektlar vakolati: (im'ya_ob'êkta->im'ya_authority)

    Masalan: ($person->email)

    O'zgarishlar, zavantazhení z konfíguratsíynyh fayllar (sho tse tse, mi rozpímo trohi píznishe) # belgilar orasiga mos keladi. Shuningdek, $smarty.config assotsiativ massivining elementlari bilan hidlanadi.

    Masalan: (#bodyBgColor#) yoki ($smarty.config.bodyBgColor)

    Bundan tashqari, asl o'zgarish ($smarty) ba'zi maxsus o'zgartirish shablonlari uchun ajratilgan, masalan, HTTP so'rovini o'zgartirish, bir vaqtning o'zida sana.

    Smarty shablonlari qiymatlarini o'zgartirish uchun o'zgartirish, kodlash funktsiyalari yoki satrlarni o'zgartirish uchun sozlanishi mumkin bo'lgan bir qator modifikatorlarga ega. Modifikatorni to'xtatish uchun, uni vertikal chizilgandan keyin, o'zgartirish nomlari, funktsiyalari yoki bir qator vino to'xtatilgunga qadar ketma-ket nomlash kerak.

    Masalan, o'zgarish qiymatini ($title) bosh harfga o'tkazish uchun tobto ustki modifikatorini qo'shish kerak. yozing: ($title|yuqori)

    To'g'ridan-to'g'ri vertikal chegara bilan ularni birma-bir suv kremi qilib, modifikatorlarning purkashini urish mumkin. Misol uchun, ($title|upper|truncate) o'zgarish qiymatini katta harflar bilan tarjima qiladi va 80 tagacha belgini pasaytiradi.

    Biz barcha modifikatorlarni bekor qilmaymiz. Roʻyxat uchun Smarty hujjatlariga qarang. Aytaylik, ushbu qo'shimcha yordam yordamida siz belgilar, satrlar va paragraflar sonini tuzatishingiz, qator qo'shishingiz, o'sha soatdagi sanalarni ko'rish formatini belgilashingiz va yana ko'p narsalarni muntazam ravishda o'zgartirishingiz va o'zgartirishingiz mumkin.

    Konfiguratsiya fayllari

    Konfiguratsiya fayllari global o'zgarishlar bilan o'zgartirilishi uchun, masalan, bitta faylning yordami uchun shablondan xakerlik qilish uchun buzilgan. Ushbu g'oya CSS uslublar jadvallariga o'xshaydi. Konfiguratsiya fayli O'zgartirish nomidan oldin dollar belgisi kabi qo'shimcha belgilar qo'ymang. Bazanni orqasidagi o'zgarishlarning qiymatlari panjada (podvyyni yoki bitta) yotqiziladi, go'yo ular dekylkoh qatorlaridan yig'ilgandek, yoga trini panjalarida to'plangan.

    # global o'zgarishlar
    pageTitle = "(!LANG:(!LANG:Hujjatlar roʻyxati"!} !}
    bodyBgColor = #000000
    tableBgColor = #000000
    rowBgColor = #00ff00
    pageTitle = "(!LANG:(!LANG:Maqolalar roʻyxati"!} !}
    Kirish = """
    qatorlar soni. Bu yoga zarur
    uni uchta panjaga qo'ying." ""
    # biriktirilgan bo'lim
    [.Ma'lumotlar bazasi]
    xost=localhost
    db = kitob
    foydalanuvchi=nina
    o'tish = 123

    Konfiguratsiya fayli bir nechta bo'limlardan (bo'limlardan) yig'ilishi mumkin va ba'zi hollarda uni keng doiradagi bo'limlar uchun ham sozlash mumkin. Im'ya bo'limlari kvadrat ibodatxonalarda polagaê. Konfiguratsiya faylining jinoyat bo'limi global miqyosda o'zgartirilishi mumkin - hidlar bir xil bo'limga kiritilmagan va har doim konfiguratsiya fayli yuklanganda olinadi. Go'yo bir bo'limdan foydalanilayotgandek, o'zgarishlar va global o'zgarishlar amalga oshirilmoqda. Go'yo yadroni o'zgartirganda, global miqyosda o'zgargandek, bo'limlarni o'zgartirganda, o'zgaruvchan bo'limlar g'alaba qozonadi. Agar siz hali ham bitta bo'limning o'rtasida ikkita o'zgarishlarni nomlasangiz, unda dam olish bo'ladi. Yuqoridagi ilova ikkita bo'limga ega - Xaridor va Ma'lumotlar bazasi, global o'zgarishlar pageTitle, bodyBgColor, tableBgColor va rowBgColor bundan mustasno.

    O'zgartirish yoki bo'limning ma'nosini tushunish uchun bu nomlar oldiga nuqta qo'yish kerak. Ayni paytda ma'lumotlar konfiguratsiyasi faylini o'qib bo'lmaydi. Ilovada biz ma'lumotlar bazasining bog'langan bo'limini qo'shdik, bu shaxsiy hisob parolini tanib bo'lmadi, shuning uchun uni ma'lumotlar bazasini tiklash uchun kiritish mumkin edi.

    (PHP 4, PHP 5, PHP 7)

    str_almashtirish- Hamma narsani almashtiring, qatorni kiriting, qatorni so'rang, almashtiring

    Tavsif

    Bu funksiya qator yoki massivni aylantiradi, mavzudagi barcha qidiruv yozuvlari almashtirish bilan almashtiriladi.

    Qoidaga ko'ra, siz so'rash/almashtirish uchun qoidalarni katlashingiz shart emas (masalan, oddiy virazi), funktsiyalarni tanlash qisqaroq preg_replace().

    Parametrlar ro'yxati

    Izlash va almashtirish kabi - massivlar, keyin str_replace() vikorist terisi mavzuda qidirish va almashtirish uchun alohida massivdan olingan ma'noni anglatadi. Agar almashtirish massivida kamroq elementlar bo'lsa, qidiruvda pastroq, keyin etishmayotgan qiymatlar uchun qatorni almashtiring, bo'sh qator bo'ladi. Agar qidiruv massiv bo'lsa va almashtirish qator bo'lsa, u qatorni qidirish massividagi teri elementi satrlari bilan almashtiring. Zvorotny vppadok sensu emas.

    Qidiruv va almashtirish massiv bo'lgani uchun ularning elementlari birinchidan oxirigacha qayta ishlanadi.

    Shukane ma'nosi, shuning uchun qanday qilib bilasiz igna(bosh). Hazillashadigan shaxsiy bo'lmagan ma'nolar uchun siz massivni yutib olishingiz mumkin.

    O'zgartiring

    O'zgartirish qiymati qidirish uchun o'zgartirish qiymati qidiriladi. Boy qiymatlar uchun siz massivni burishingiz mumkin.

    Mavzu

    Qidiruv va almashtirish, shuningdek qidiruv amalga oshiriladigan qator yoki massiv pichan uyasi(Stig sina).

    Agar mavzu massiv bo'lsa, u holda almashtirish qidiruvi mavzu terisi elementi ustiga olib boriladi va funksiya natijasi massiv bo'ladi.

    Agar u o'tkazilsa, unda amalga oshirilgan almashtirishlar soni belgilanadi.

    Ular aylanayotganini anglatadi

    Bu funksiya qator yoki massivni almashtirish qiymatlari bilan aylantiradi.

    Murojaat qiling

    Button №1 str_replace()

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

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

    // jozibali: Siz har kuni pizza, pivo va muzqaymoq iste'mol qilishingiz 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);

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

    Butt №2 Potensial fokuslarni qo'llang str_replace()

    // Buyurtmani almashtirish
    $str = "1-qator 2-qator 3-qator 4-qator n";
    $tartib = massiv("\r\n", "\n", "\r");
    $almashtirish = "
    " ;

    // Ularni qayta tiklash uchun \r\n orqa qismini tiklang.
    echo $newstr = str_replace ($buyurtma, $almashtirish, $str);

    // F ko'rsatish, chunki A o'rniga B, keyin B bilan C va hokazo.
    // Natijada E o'rniga F o'zgaradi va almashtirishning bo'laklari o'ngga siljiydi.
    $search = massiv("A", "B", "C", "D", "E");
    $almashtirish = massiv("B", "C", "D", "E", "F");
    $subject = "A";
    echo str_replace($search, $almashtirish, $mavzu);

    // Zoti: olma findiq no'xati (ko'rsatilgan sabablarga ko'ra)
    $harflar = massiv("men", "pro");
    $fruit = massiv("olma", "no'xat");
    $text = "Men gapiryapman";
    $output = str_replace($harflar, $fruit, $matn);
    echo $output;
    ?>

    Eslatmalar

    Hurmat: Ushbu funktsiya ikki shaklda ma'lumotlarni qayta ishlash uchun xavfsizdir.

    Qo'riqchi

    O'zgartirish uchun hurmat qiling

    shunday yak str_replace() agar siz levoruchni almashtirsangiz, unda bir nechta almashtirish mavjud bo'lsa, qiymatni boshqasiga kiritish orqali uni avvalroq almashtirishingiz mumkin. Bu tarafdagi dumbaga qarang.

    Hurmat:

    Bu funksiya katta-kichik harflarga sezgir. G'alaba str_place() almashtirmoq, katta-kichik harfga befarq.

    Hurmat: 64-bitli platformalarda PHP 7.0.0 da qator uzunliklari uchun boʻsh joy yoʻq, 32-bitli tizimlarda va PHPning dastlabki versiyalarida qatorlar 2 GB (2147483647 bayt) dan katta boʻlishi mumkin emas.

    Sintaksis

    Chotirmani turli usullar bilan belgilashning bir qancha usullaridan foydalanish mumkin:

    • bitta panjalar
    • tebranish panjalari
    • nowdoc sintaksisi (PHP 5.3.0 dan boshlab)

    Yagona oyoqlar

    Qatorni belgilashning eng oson yo'li - bu yakka oyoqlarga qo'yish (belgi " ).

    Qator o'rtasida bitta oyoqda g'alaba qozonish uchun vv ni teskari chiziq bilan kesib tashlang ( \ ). Qochish chizig'ini o'zingiz yozishingiz kerak, dublikat yoga ( \\ ). Yomon chiziq imlosining barcha boshqa o'zgarishlari asosiy belgilar sifatida talqin qilinadi: bu siz boshqaradigan boshqa ketma-ketliklarni yutib olishga harakat qilishingizni anglatadi, shuning uchun \r yoki \n, ular har qanday maxsus xatti-harakatlarning o'rnini bosuvchi sifatida ko'riladi.

    aks-sado "oddiy qator";

    aks-sado "Shunday qilib, siz qatorlarni kiritishingiz mumkin
    yangi qator belgisi o'qi shunday,
    yaxshi"
    ;

    // Ko'rish: Yakos Arnold: "Men qaytaman"
    aks-sado "Bir marta Arnold: "Men qaytaman" dedi.;

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

    // Ko'rish: C:\*.* ko'rdingizmi?
    echo "C:\*.*-ni o'chirib tashladingizmi?" ;

    // Displey: Tse ishdan chiqarilmaydi: yangi qator
    aks-sado "Tse ishdan bo'shatilmaydi: yangi qator";

    // Displey: $expand ni o'zgartiring va $ yo kengaytirmang
    aks-sado "O'zgartirish $kengaytirma ham $yoki kengaytirmang";
    ?>

    Podvini panjalari

    Simli oyoqlarda (") qator qo'yilgani kabi, PHP maxsus belgilarning keyingi ketma-ketligini taniydi:

    Asosiy ketma-ketliklar
    Ketma-ketlik Qiymat
    \n yangi qator (ASCII da LF yoki 0x0A (10))
    \r vagonning aylanishi (CR yoki 0x0D (13) dan ASCIIgacha)
    \t gorizontal jadvallar (HT yoki 0x09 (9) ASCII)
    \v vertikal yorliq (VT yoki 0x0B (11) ASCII) (PHP 5.2.5 dan beri)
    \e qochish belgisi (ASCIIda ESC yoki 0x1B (27)) (PHP 5.4.4 dan beri)
    \f yon uzatish (FF yoki 0x0C (12) ASCII ga) (PHP 5.2.5 dan beri)
    \\ guruch tupurish
    \$ dollar belgisi
    \" oyoq
    \{1,3} Sakkizlik sanoq sistemasidagi oddiy belgiga mos keladigan belgilar ketma-ketligi, taqlid qiluvchilar baytga sig'ish uchun qayta tartiblanadi (tobto "\400" === "\000")
    \x(1,2) o'n olti sanoq sistemasidagi muntazam belgiga mos keladigan belgilar ketma-ketligi
    \u(+) Unicode belgisi uchun odatiy moslikka mos keladigan belgilar ketma-ketligi, go'yo u UTF-8 fayliga mos keladi (PHP 7.0.0 da qo'shilgan)

    Ketma-ket, bir panjada yotqizilganidek, skrining, xoh u vivede ramzi bo'lsin, u ham o'zini ekranlashdir. PHP 5.1.1 dan oldin, teskari chiziq bilan \($var) do'stlashmaslik.

    Heredok

    Qatorni tanlashning uchinchi usuli - heredoc sintaksisini tanlash: <<< . Keyingi operatordan keyin identifikatorni, keyin qatorning tarjimasini ko'rsatish kerak. Shundan so'ng, qatorning o'zi, keyin esa qo'shimchani yopadigan bir xil identifikator.

    Qator aybdor aniqlovchining egri chizig‘idan boshlan, tobto. Vín birinchi qatorda turgani uchun aybdor. Bundan tashqari, identifikator PHP-dagi boshqa teglar kabi nomlash qoidalariga bo'ysunadi: faqat harf-raqamli belgilar va o'rindiq belgisiga ruxsat beriladi va raqamlarda aybdor emas (o'rindiq belgisiga ruxsat beriladi).

    Uvaga

    Shuni ta'kidlash kerakki, identifikator bilan yopilgan qator boshqa belgilar uchun qasos olishda aybdor emas, kim bilan nuqta aybdor ( ; ). Ce identifikator degan ma'noni anglatadi aybdor emas va koma bilan dog'ga yoki undan keyin kundalik bo'shliqlar yoki jadval belgilaridan foydalanish mumkin emas. Shuni ham tushunish kerakki, yopiladigan identifikator oldidagi birinchi belgi yangi qatorning ramzi, operatsion tizimingizning ahamiyati uchun aybdor. Masalan, UNIX tizimlarida, shu jumladan macOS da, \n. Identifikator egri chizig'i yopilgach, yangi qator ham boshlanishi mumkin.

    Ushbu qoida buzilganligi sababli, identifikatorni yopish "toza" emas, yopilish identifikatori kundalik bo'lishi va PHP bu qidiruvni davom ettirishi muhimdir. Har qanday holatda, bu holda, noto'g'ri identifikator hech qachon topilmaydi, lekin u skript oxiridagi satr raqami bilan tahlilni kechiradi.

    №1 holat noto‘g‘ri sintaksis holati

    sinf foo(
    umumiy $bar =<<bar
    EOT;
    // identifikator oldidagi yopiladigan yozuv yaroqsiz
    }
    ?>

    Stok №2 To'g'ri sintaksis zaxirasi

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

    Heredok sinfni ishga tushirish uchun yomon bo'lishi mumkin emas. PHP 5.3 versiyasidan boshlab birja faqat heredoc-da kengayib bormoqda, shuning uchun siz o'z o'zgarishlaringizga g'amxo'rlik qilishingiz mumkin.

    Heredok-matn o'zini shunday tutadi, pastki panjalaridagi qator kabi, ular bilan birga bo'lmaydi. Bu shuni anglatadiki, siz heredokda panjalaringizni ekranga tushirishingiz shart emas, lekin siz avvalgidek, kalitlar ketma-ketligi bo'yicha folbinlikni yutib olishingiz mumkin. O'zgarishlar qayta ishlanadi, lekin bu hujjatning o'rtasida katlama o'zgarishlar stosuvannyam dan, u qatorlar robotlar taqdirda bo'lgani kabi, faqat hurmat bo'lishi kerak.

    Button №3

    $str =<<qator misoli,
    qanaqa qator shpal,
    heredok sintaksisiga tayanib.
    EOD;

    Sinf foo
    {
    var $foo;
    var$bar;

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

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

    aks-sado<<Mening ismim "$name". Men boshqachaman $foo -> foo .
    Endi men vivojuman
    ( $foo -> bar [ 1 ]) .
    Katta "A" harfini kiritishingiz mumkin: \x41
    EOT;
    ?>

    Mening ismim "Imerek". Men Foo bilan do'stman. Endi men Bar2 ga qo'shilaman. Katta "A" harfidan foydalanishingiz mumkin: A

    Funktsiya argumentlari orqali ma'lumotlarni uzatish uchun heredoc sintaksisini ham o'zgartirishingiz mumkin:

    5.3.0 versiyasidan boshlab heredoc sintaksisi yordamida statik o'zgarishlar va sinf konstantalarini amalga oshirish mumkin bo'ldi:

    Button №5

    // Statik o'zgarishlar
    functionfoo()
    {
    statik $bar =<<Bu erda hech narsa yo'q ...
    yorliq;
    }

    // Doimiylik/sinfga hukmronlik
    sinf foo
    {
    const BAR =<<Vikoristannya doimiylari ko't
    FOOBAR;

    Umumiy $base =<<Viktoriya maydonining dumbasi
    FOOBAR;
    }
    ?>

    PHP 5.3.0 dan boshlab, Heredoc identifikatorini tebranish oyoqlari bilan ham olib tashlash mumkin:

    Nowdoc

    Nowdoc - bitta oyoqli qatorlar uchun bir xil, qo'ltiq ostidagi qatorlar uchun bir xil heredok. Nowdoc heredokga o'xshaydi, lekin o'rtada kundalik almashtirishlarni qabul qilmang. Ushbu dizayn PHP kodini yoki boshqa ajoyib matn bloklarini ekranga ehtiyoj sezmasdan uzatish uchun ideal. Somy vinosi SGML konstruktsiyasiga o'xshash trochga ega tim, scho voidlyaê blok matn, ishlov berish uchun topshiriqlar emas.

    Nowdoc <<< , bu heredokda g'alaba qozonadi, lekin undan keyin kelgan aniqlovchi bitta panjada, masalan, <<<"EOT" . Heredoc identifikatorlari uchun, shuningdek, nowdoc uchun, ayniqsa yaqin identifikatorga kiradiganlar uchun nima qilish kerakligini bilasiz.

    Stok #7 Vikoristannya nowdoc zaxirasi

    aks-sado<<<"EOD"
    dumba matni
    bir qator qatorlarni qarzga oladi,
    nowdoc sintaksisi bo'yicha yordam uchun. Zvorotni slishi zavzhd tom ma'noda aylantirildi,
    masalan, \\ ta \".
    EOD;

    Natija

    Nowdoc sintaksisi yordami uchun oz sonli qatorlarni olgan matnga misol. Zvorotny slyshí zavzhdi tom ma'noda olinadi, masalan, \ i \".

    Butt №8 Nowdoc qatori o'zgaruvchilar bilan iqtibos keltiruvchi misol

    /* Almashtiriladigan kattaroq buklanadigan dumba. */
    sinf foo
    {
    ommaviy $foo;
    umumiy $bar;

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

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

    aks-sado<<<"EOT"
    Mening ismim "$name". Men boshqachaman $foo->foo.
    Endi men boshqachaman ($foo->bar).
    Katta "A" ni olib kelish sizning aybingiz emas: \x41
    EOT;
    ?>

    Natija

    Mening ismim "$name". Men boshqachaman $foo->foo. Endi men boshqachaman ($foo->bar). Katta "A" ni olib kelish sizning aybingiz emas: \x41

    Butt №9

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

    Hurmat:

    Nowdoc yordami PHP 5.3.0 ga qo'shildi.

    Obrobka zminnyh

    Oyoq ostidagi qator paydo bo'lgandek yoki geredokning yordami uchun uning o'rtasida o'zgarishlar qayta ishlanadi.

    Men ikki turdagi sintaksisdan foydalanaman: oddiy va katlamali. Oddiy sintaksis osonroq va qulayroq. Vin massivning o'zgarishini, ma'nosini o'zgartirish imkoniyatini beradi ( massiv) yoki ob'ektning kuchi ( ob'ekt) minimal zusil bilan.

    Katlama sintaksisi jingalak kamar uchun ishlatilishi mumkin, shuning uchun siz virazni his qilishingiz mumkin.

    Oddiy sintaksis

    Tarjimon dollar belgisini qanday qiladi ( $ ), sharoblar juda ko'p belgilar bilan to'ldirilgan, o'zgarish nomini to'g'ri shakllantirish mumkin. Agar siz ismning oxirini aniq nomlamoqchi bo'lsangiz, o'zgarish nomini jingalak kamonga qo'ying.

    $juice = "olma";

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

    // noto'g'ri. "s" - o'zgarish nomining asosiy belgisi va $juice nomining o'zgarishi.
    echo "U $juicesdan tayyorlangan sharbat ichdi." ;

    // To'g'ri. Yoyning yordami uchun o'zgartirish nomining oxiri qat'iy buyurilgan:
    echo "U $( sharbat ) s dan tayyorlangan sharbat ichdi." ;
    ?>

    Natija

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

    Xuddi shunday, massiv elementi kengaytirilishi mumkin ( massiv) yoki ob'ektning kuchi ( ob'ekt). Indekslarda massiv egri chiziqli kvadrat yoyga ega ( ] ) indeksga tayinlashning tugashini bildiradi. Ob'ektning hokimiyat organlari uchun oddiy o'zgarishlar kabi qoidalarning o'zi o'rnatiladi.

    Stok №10 Oddiy sintaksis zaxirasi

    define("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 " $odam -> robert 2 $odam -> temirchilarga salom berdi." ; // Ishlamang
    ?>

    Natija

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

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

    Stok №11 Salbiy raqamli indekslar

    $string = "string";
    aks-sado "Indeksli belgi -2 eski$string[-2].", PHP_EOL;
    $string[-3] = "o";
    aks-sado "-3 pozitsiyasidagi belgini "o" ga o'zgartirish tajovuzkor qatorni beradi:$string ." , PHP_EOL ;
    ?>

    Natija

    Symbol íz íindex -2 doívnyuê n. -3 pozitsiyasidagi belgini "o" ga o'zgartiring, tajovuzkor qatorni beradi: kuchli

    Katlanadigan narsa uchun katlanadigan sintaksisdan foydalaning.

    Katlanuvchi (jingalak) sintaksisi

    Sharob aql uchun muhim bo'lgan narsaga emas, balki g'olib bo'ladigan yig'iladigan nutqqa imkon beradigan narsaga deyiladi.

    Skalar o'zgarish, massiv elementi yoki qatorda paydo bo'ladigan ob'ektning kuchi bo'ladimi, sintaksis bilan qatorda tasvirlar bo'lishi mumkin. Faqat virazni xuddi shunday, ketma-ket poza kabi yozing va keyin yogoni qo'ying { і } . Oskilki { Sizda ekranlar bo'lishi mumkin emas, qaysi sintaksisni faqat agar tanib olish mumkin $ uzluksiz kuzatib borish { . G'alaba {\$ , suiiste'mol qilish {$ . Dekilka tushuntirish misollari:

    // Barcha kechirimlarni ko'rsatish
    xato_hisoboti (E_ALL);

    $ buyuk = "ajoyib" ;

    // Mashq qilmang, qarang: Tse (ajoyib)
    echo "ce($buyuk)";

    // Mashq qiling, qarang: Bu ajoyib
    echo "ce($buyuk)";

    // Jarayon
    aks-sado "Tsey kvadrati keng( $square -> eni ) 00 santimetr.";

    // Pratsiyuê, kalitlar, panjalarga yotqizish, faqat jingalak qo'llar sintaksisi bilan mashq qiling
    echo "Ishlaydi: ($ arr["key"])";

    // Jarayon
    echo "Yaratish: ($arr[4][3])";

    // Nima uchun bu noto'g'ri va nima uchun siz $foo pozasiz
    // Qatorlar. Boshqacha qilib aytganda, tse yak va undan oldin siz ishlaysiz,
    // PHP ning ale parchalari orqadan orqaga foo doimiysi, tse vikliche
    // Kechirasiz E_NOTICE (aniqlanmagan doimiy).
    aks-sado "Tse to'g'ri emas:($arr[foo][3])";

    // Amaliyot. Qachon o'rtada vikoristanny boy massivlar
    // vikariy yoylar qatorlari
    echo "Ishlaydi: ($ arr ["foo"] [3])";

    // Amaliyot.
    echo "Ishlaydi:". $arr["foo"][3];

    aks-sado "Tse tezh pracyuê:($obj->qiymatlar[3]->ism)";

    aks-sado "Nomdagi o'zgarishlarning qiymati$name: ($($name))";

    aks-sado "GetName() funktsiyasi yoqilgandek, nomga o'zgartirish qiymati:($( getName ())) ";

    aks-sado "\$object->getName() ni aylantirib, nom qiymatini o'zgartiring:($( $object -> getName ())) ";

    // Ishlamang, ko'rsating: Nimani aylantirsangiz getName(): (getName())
    aks-sado "Kim getName() ni aylantirsa: (getName())";
    ?>

    Ushbu sintaksisning yordami uchun qatorning o'rtasida joylashgan ob'ektning vakolatlariga kirish ham mavjud.

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

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

    Natija

    Men barman. Men barman.

    Hurmat:

    Funktsiyalar, usul vikilari, statik sinf o'zgarishlari, shuningdek o'rtadagi sinf konstantalari {$} , PHP 5-versiyasidan boshlab. Biroq, ko'rsatilgan qiymat bir xil kontekstda o'zgartirilganligi sababli o'zgartiriladi, qaysi tartibda ko'rsatilmagan. Yagona jingalak kamonlarni tanlash ( {} ) funktsiyalar, usullar, sinf konstantalari yoki statik o'zgarishlar sinflari qiymatlariga kirish uchun amaliy emas.

    // Barcha kechirimlarni ko'rsatish
    xato_hisoboti (E_ALL);

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

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

    // Chop etmang: men A va W ni xohlayman
    echo "I want to bi ($( pivo :: softdrink )) \n" ;

    // Tse tezh pratsyuê, displey: Men Aleksandr Keytni xohlayman
    echo "Men bo'lishni xohlayman ($( pivo :: $ale )) \n" ;
    ?>

    Yoga o'zgartiradigan qatordagi belgiga kirish

    Qatorlardagi ramzlarni burish va o'zgartirish mumkin, ularni qatorning qulog'iga, noldan boshlab, qatordan keyin kvadrat qo'llarda, masalan, $str . Qiêíí belgisi uchun qatorni belgilar qatori kabi o'ylab ko'ring. Agar 1 tadan ortiq belgini olib tashlash yoki almashtirish kerak boʻlsa, funksiyalarni oʻzgartirishingiz mumkin substr()і substr_replace().

    Hurmat: PHP 7.1.0 dan boshlab salbiy qiymatlar qo'shiladi. Hidi qator oxiridan usunennya so'raydi. Ilgari, salbiy farzand asrab olish afv etishni teng deb atagan E_NOTICE o'qish soati ostida (bo'sh qatorni aylantirish) yoki E_OGOHLANTIRISH bir soatlik ro'yxatga olish uchun (qatorni o'zgartirmasdan to'ldirish).

    Hurmat: Qatordagi belgidan oldin siz qo'shimcha jingalak yoylarni ham qidirishingiz mumkin, masalan, $str(42) .

    Uvaga

    Qator chegarasidan tashqarida zsuvda yozishga harakat qilib, birinchi smenaga bo'shliqlar bilan qatorni qo'shing. Birgina tipi ham butunga aylantirilmaydi. Noto'g'ri ofset turi kechirim deb ataladi E_OGOHLANTIRISH. Qatorning birinchi belgisi ustiga yoziladi. PHP 7.1.0 dan boshlab, bo'sh qatorni belgilash halokatli kechirishni talab qiladi. Avvalroq, null baytni (NULL) bosib.

    Uvaga

    PHP-dagi qatorlar baytlarning ichki massivlaridir. Natijada, siljishlar qatoriga kirish yoki o'zgartirish katta baytli kodlash nuqtai nazaridan xavfsiz emas va faqat bitta baytli kodlashda qatorlarda o'zgartirilishi mumkin, masalan, ISO-8859-1 .

    Hurmat: PHP 7.1.0 dan boshlab, bo'sh indeksni almashtirish halokatli kechirishni keltirib chiqardi, ilgari bu tartibda u yo'naltirilmasdan massivga aylandi.

    Button №12

    // Birinchi qator belgisini olib tashlash
    $str = "Bu sinov." ;
    $first = $str[0];

    // Qatorning uchinchi belgisini olib tashlash
    $third = $str[2];

    // Qolgan qator belgilarini olib tashlash
    $str = "Bu hali ham sinov." ;
    $last = $str[strlen($str) - 1];

    // Qator belgisining qolgan qismini o'zgartiring
    $str = "Dengizga qarang" ;
    $str [strlen ($str) - 1] = "e";

    ?>

    PHP 5.4 dan boshlab, raqamlardan qasos olish uchun ketma-ket zsuv yoki butun son bilan yoki qatorga o'rnatilishi kerak, aks holda u oldinda ko'rinadi. Avvalroq zsuv, bir qator aqldagi vazifalar "foo", kechiktirmasdan, u aylandi 0 .

    Butt #13 Vidminnosti mzh PHP 5.3 va PHP 5.4

    $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 vykonannya kogo dumba natijasi:

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

    Ushbu misolni PHP 5.4 da yozish natijasi:

    string(1) "b" bool(true) Ogohlantirish: 7-satrda /tmp/t.php da "1.0" ning noqonuniy siljishi string(1) "b" bool(false) Ogohlantirish: / ichidagi noqonuniy satr ofset "x" tmp/t.php 9-satrda string(1) "a" bool(false) string(1) "b" bool(false)

    Hurmat:

    Yordam uchun turli turlarga (bir oz massivlar yoki yangi interfeyslarni amalga oshiradigan ob'ektlar uchun) kirishga urinish yoki {} harakatni aylantiring NULL.

    Hurmat:

    PHP 5.5 sintaksisga yordam berish uchun inline literallarda belgilarga kirishni qo'llab-quvvatladi yoki {} .

    Qatorlarni o'zgartirish uchun ko'plab jigarrang funktsiyalar mavjud.

    Asosiy funktsiyalar qator funktsiyalari bo'limida tasvirlangan va kengaytirilgan qidirish va almashtirish uchun - Perl-sum muntazam o'zgaruvchilarning funktsiyalari.

    Bir qatorda qayta tartiblash

    Qo'shimcha yordam uchun ma'no qatorga aylantirilishi mumkin (tor), lekin funktsiyalari strval(). In virazah, de muhtoj qator, transformatsiya avtomatik. Tse vídbuvaêtsya, siz vazifalarni vikoristovuête bo'lsa aks-sado yoki chop etish aks holda, agar o'zgartirishning ma'nosi ketma-ket teng bo'lsa. Keramika turlari va turlari bilan manipulyatsiya bo'limlarini o'qish yanada tushunarli. hayron settype().

    Masivi har doim bir qatorga aylanadi "massiv", shuning uchun siz massivda ko'rsatolmaysiz ( massiv), vikorist aks-sado yoki chop etish, bilish uchun, nima qasos olish kerak. okremy element ustida qarash uchun, bir lahzaga schos vikoristovyte echo $arr["foo"]. Buning uchun pastki qismida hayratga tushish uchun, qanday qilib butun joyni tasavvur qilish / qarash.

    Turni o'zgartirish uchun konvertatsiya qilish uchun "Ob'ekt" yozing ip __toString sehrli usuli oqlanadi.

    Qiymat NULL har doim bo'sh qatorga aylanadi.

    Bachiti yuqori bo'lganidek, to'g'ridan-to'g'ri massivlar, ob'ektlar qatoriga aylantirildi, ammo resurslar ma'nosi, crim í̈x turlari haqida bir xil asosiy ma'lumotlarni bermaydi. Yaxshilash uchun qiymatni ko'rishning eng yaxshi usuli bu funktsiyani yutib olishdir print_r()і var_dump().

    PHP-da kattaroq qiymatlarni barqaror tejash uchun qayta tartibga solish mumkin. Ushbu usul serializatsiya deb ataladi va qo'shimcha funktsiyalar uchun ishlatilishi mumkin serialize().

    Raqamdagi qatorlarni qayta tartiblash

    Qator raqamli qiymat sifatida tan olinganligi sababli, ushbu turdagi natijaviy qiymat quyida ko'rsatilganidek aniqlanadi.

    ".", "e" yoki "E" belgilaridan biriga qasos olmaslik uchun raqamning qiymati butun sonlar orasiga joylashtiriladi ( PHP_INT_MAX), qator butun son sifatida tan olinadi ( butun son). Reshti vipadkivda u suzuvchi nuqtali raqam bilan kiritiladi ( suzmoq).

    Qiymat satrning kob qismiga beriladi. Agar qator to'g'ri raqamli qiymatdan boshlansa, qiymat teskari bo'ladi. Aks holda qiymat 0 (nol) bo'ladi. Verne raqamli qiymati - qadam yaqinlashib kelayotgan neobov'yazkovy ko'rsatkichi bilan old belgisi orqasida (o'nlab ochko o'rniga mumkin) bir yoki bir necha raqam tse. Bosqichning indikatori keyingi bir yoki bir nechta raqam bilan "e" yoki "E" dir.

    $foo = 1 + "10,5"; // $foo float emas (11.5)
    $foo = 1 + "-1,3e3"; // $foo float emas (-1299)
    $foo = 1 + "bob-1.3e3"; // $foo butun son emas (1)
    $foo = 1 + "bob3"; // $foo butun son emas (1)
    $foo = 1 + "10 ta kichik cho'chqa"; // $foo butun son emas (11)
    $foo = 4 + "10,2 kichik cho'chqalar"; // $foo float emas (14.2)
    $foo = "10,0 cho'chqa" + 1; // $foo float emas(11)
    $foo = "10,0 cho'chqa" + 1,0; // $foo float emas(11)
    ?>

    Divalarning o'zgarishi haqida hisobot. strtod(3) Unix hujjatlariga qarang.

    Agar siz norozilik bildirmoqchi bo'lsangiz, bu bo'linishni qo'llash orqali bo'lsin, ko'rgan narsangizni ko'rishingiz uchun uni va o'sha haqoratli qatorni nusxalang va joylashtiring:

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

    Belgi kodini o'zgartirishni maqsadda yoga yozish orqali tekshirmang (masalan, C da). Belgilarni ASCII kodlariga va orqaga aylantirish uchun funksiyalardan foydalaning ord()і chr().

    Qator turini amalga oshirish tafsilotlari

    7 yil oldin

    Hujjatlarda eslatilmaydi, lekin heredok oxiridagi nuqtali vergul haqiqiy nuqtali vergul sifatida talqin qilinadi va sintaksis xatolaridan oldingi kabi.

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

    Bunga quyidagilar kirmaydi:

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

    Nuqtali vergulsiz, lekin yaxshi:

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

    3 yil oldin

    Siz satrni char qatori kabi burishingiz mumkin (C kabi)

    $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

    Quvvat ob'ektini va satr o'rtasida usul ob'ektini ishga tushirish uchun murakkab sintaksisni tezlashtirishingiz mumkin. Masalan...
    sinf testi (
    umumiy $bir = 1;
    davlat funktsiyasi ikki()(
    qaytish 2;
    }
    }
    $test = yangi test();
    echo "foo($test -> bir) bar($test -> ikki())";
    ?>
    "foo 1 bar 2" chiqaradi.

    Biroq, siz o'zingizning nomingizdagi barcha narxlarni so'ra 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. Konstantalar va statistik ma'lumotlar qatordagi tanaffusni talab qiladi.

    3 yil oldin

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

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

    // Bitta nuqta raqamga teng, string intstr dan int ga noto'g'ri aylantirilgan, keyin u test raqamiga mos keladi.

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

    // Bu, agar u sinovdan o'tgan/g'olib bo'lgan/vazifa foydalanuvchi kiritish bo'lsa, agar u faqat butun sonni kutayotgan va sinovdan o'tkazayotgan bo'lsa, xavf qanchalik katta ekanligini anglatadi.

    // Ko'rinib turibdiki, faqat 123 qatori "123" bo'lishi kerak, 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 son harflardagi bosh nollar ê “sakkizlik” deb talqin qilinadi, c.f. strtol().
    * Satrlardagi bosh nollar (masalan, foydalanuvchi tomonidan taqdim etilgan maʼlumotlar), agar (bevosita yoki aniq) butun soniga eʼtibor berilmasa, í oʻnlik sanaladi, c.f. strtod().

    10 yil oldin

    Bu yerda jingalak qavslar sintaksisidagi ixtiyoriy ifodalar, jumladan, konstantalar va boshqa funksiya chaqiruvlari uchun ikki tirnoqli satrlar va geredoklar uchun oddiy tasvir:

    // Hack deklaratsiyasi
    function_expr ($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

    O'ylaymanki, ma'lumot hech bo'lmaganda PHP saytining o'ng tomonida ko'rinadi, deb izoh berish foydali bo'lishi mumkin.

    Muayyan kalit kaliti bilan ikki tomonlama aloqani bartaraf qilmoqchi ekanligingizni tekshirish uchun siz T_ENCAPSED_AND_WHITESPACE xatosini yuborishingiz mumkin. Kílka tse yakni eng chiroyli xato xabarlaridan biri deb hisoblaydi.

    Quyidagi kabi ifoda:

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

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

    birma-bir parchalanib ketadi.

    Siz buni quyidagicha hal qilishingiz mumkin:

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

    Men qolgan o'zgarishlarni shaxsiy afzal ko'raman, chunki u tabiiyroq va ibora satrdan tashqarida qanday bo'lishiga yaqinroq.

    Bu aniq emas (mening fikrimcha, teng asosda), agar PHP menga ekspreslar o'rtasidagi eng kichik havolalardan birini tanlashga imkon bersa, lekin men arafasida bo'lishim mumkin, agar faktlar iqtiboslarini yig'ish uchun bir soat bo'lsa-chi? agar u string qiymatining bir qismi bo'lmasa - 10 string allaqachon ajratilgan bo'lsa, tirnoqlar faqat yo'ldan to'sqinlik qiladi ...?

    2 yil oldin

    Ikkalasi ham ishlashi kerak :(

    sinfsinovdan o'tkazish{
    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=yangisinovdan o'tkazish();
    $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
    EOD;

    Yordam uchun tsíêí hammasi bir xil rangni ko'rsatadi:

    $html =<<$ sharh
    EOD;

    u bilan ishlashni ancha osonlashtiradi

    11 yil oldin

    O'z fikringizni bildirish uchun siz ma'lumotlaringiz haqidagi oldingi ma'lumotlarni o'qiy olmaysiz;)

    Bundan tashqari, barcha satrlar raqamlarga o'rnatilishi mumkin ("$a" > "$b" testida), natijada 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)
    ?>

    aralashgan preg_replace(aralash naqsh, aralash almashtirish, aralash mavzu [, int chegarasi])

    Mavzu zbígív íz shablon namunasi qatorini qidirishni tekshiring va í̈x ni almashtirish bilan almashtiring. Misol uchun, agar chegara parametri ko'rsatilgan bo'lsa, u limit kiritish shablonini bekor qiladi; Agar kamchiliklarni cheklash yoki -1 bo'lsa, shablonga kiritilgan barcha ma'lumotlar almashtiriladi.

    O'zgartirish \n ​​yoki (PHP 4.0.4 dan boshlab) $n yordamida amalga oshirilishi mumkin, boshqa variant esa qisqaroq. Teri taglikning dumaloq kamonlariga o'rnatilgan n "n" ga mos keladigan pastki ip bilan almashtiriladi. .

    Agar siz shablonni o'zgartirishga o'zgartirsangiz, uni pastki maskalarga yuboring, agar niqob ortida raqam bo'lsa, vaziyatni ayblashingiz mumkin. Bunday vaqtda, belgi \\n kechirimga olib keladi: birinchi pastki niqobni yuboring, undan keyin 1 raqami keladi, \\11 deb yozing, bu o'n birinchi pastki niqob uchun so'rov sifatida talqin qilinadi. Qurilishni tezlashtirish uchun siz buni tushunarsiz tarzda ishlatishingiz mumkin \ $ (1) 1, bu birinchi pastki niqobdagi harfning izolyatsiyasini va 1 raqamini ko'rsatadi.

    Qaysi misol natijasi bo'ladi:

    2003 yil 1 aprel

    Agar funksiyaning vaqti naqsh xatosi bilan aniqlangan bo'lsa, mavzu qiymati o'zgarishi aylantiriladi, aks holda sub'ektning standart matni aylantiriladi.

    Funktsiyaning dastlabki uchta parametri preg_replace() bir o'lchovli massivlar bo'lishi mumkin. Massivni tahlil qilishda, bir qator g'olib kalitlarga o'xshab tushishda, badbo'y hid massivda tartiblangan tarzda olinadi. Naqsh va almashtirish uchun massiv kalitlarini belgilash majburiy emas. Biroq, siz barcha bir xil vikoristovuvaty indekslari, andozalar va qatorlar o'rnatish uchun, almashtirish, vikoristovyte funktsiyasi ishtirok etish uchun. ksort() terini parvarish qilish uchun.


    Misol 2. Funksiya argumentlari sifatida sonli indeksli bir nechta massivlar preg_replace()

    $string = – Tez qo‘ng‘ir tulki dangasa itning ustidan sakrab o‘tdi.;$patterns [ 0 ] = "/tezkor/";
    $ naqshlar[1] = "/qo'ng'ir/";
    $patterns[2] = "/fox/"; $replacements[ 2 ] = "ayiq" ;
    $almashtirishlar[1] = "qora";
    $replacements [ 0 ] = "sekin" ;preg_replace ($patterns , $almashtirishlar , $string );
    ?>

    Natija:

    Natija:

    Sekin qora ayiq lagid it ustida aylanib yuradi.

    Masalan, mavzu parametri massiv bo'lgani uchun teri elementlari uchun o'sha shablon o'rnini qidiring. Aylanadigan natija ham massiv bo'ladi.

    Shuningdek, naqsh va almashtirish parametrlari massivdir, preg_replace() ikkala massivdan qahramonning yordamiga ko'ra, operatsiya uchun elementlar va vikorist í̈x juftligiga ko'ra, so'rang va almashtiring. Agar almashtirish massivida ko'proq elementlar bo'lsa, pastki naqsh, kundalik elementlarning almashtirilishi, almashtirish uchun bo'sh qatorlar olinadi. Naqsh holatida, agar naqsh massiv bo'lsa va almashtirish ketma-ket bo'lsa, naqsh massivining teri elementi qidiriladi va naqsh bilan almashtiriladi (naqsh massivning barcha elementlari nuqtai nazaridan bo'ladi, keyin almashtirishlar qatori belgilanadi). Variant, agar naqsh qatorda bo'lsa va almashtirish massiv bo'lsa, bu mantiqiy emas.

    /e modifikatori funksiyaning harakatini o'zgartiradi preg_replace() Shu tarzda, kerakli almashtirishlarni o'zgartirgandan so'ng, almashtirish parametri PHP kodi sifatida talqin qilinadi va shundan keyingina u almashtirish uchun o'zgartiriladi. G'alaba modifikatori, ehtiyot bo'ling: almashtirish parametri to'g'ri PHP kodida aybdor, aks holda haftalik funktsiyadan qasos olish uchun ketma-ket preg_replace(), winicne sintaksisi kechirim


    Misol 3. Dekilka shablonlarini almashtirish

    $patterns = massiv( "/(19|20)(\d(2))-(\d(1,2))-(\d(1,2))/",
    "/^\s*((\w+))\s*=/");
    $almashtirish = massiv("\3/\4/\1\2", "$\1=");
    echo preg_replace ($patterns, $almashtirish, "(startDate) = 1999-5-27");
    ?>

    Tsey dumba vivede:

    Barcha HTML teglarini bosh harfga aylantiring


    Misol 5. HTMLni matnga aylantirish

    // Chiqishdagi $document HTML hujjati boʻlishi mumkin.
    // Barcha HTML teglarini, javascript bo'limlarini olib tashlash kerak,
    // Belgilar namunasi. Shuningdek, aktlarni almashtirish kerak
    // HTML ob'ektlari ularning ekvivalenti bilan.
    $search = massiv( ""]*?>.*?"si", // JavaScript-ni ko'rish
    ""<[\/\!]*?[^<>]*?>"si" , // HTML teglarini ko'rish
    ""([\r\n])[\s]+"", // Namuna belgilarni ko'rish
    ""&(quot|#34);"i" , // HTML ob'ektlarini almashtiring
    ""&(amp|#38);"i" ,
    ""&(lt|#60);"i" ,
    ""&(gt|#62);"i" ,
    ""&(nbsp|#160);"i" ,
    ""&(iexcl|#161);"i" ,
    ""&(tsent|#162);"i" ,
    ""&(funt|#163);"i" ,
    ""&(nusxalash|#169);"i" ,
    ""(\d+);"e"); // PHP kodi kabi talqin qiling$almashtirish = massiv("",
    "" ,
    "\\1" ,
    "\"" ,
    "&" ,
    "<" ,
    ">" ,
    " " ,
    chr(161),
    chr(162),
    chr(163),
    chr(169),
    "chr(\\1)" ); $matn = preg_replace($search, $almashtirish, $hujjat);
    ?>

    Qolgan soatlarda Habré-da PHP tilini muhokama qilish buklama tizimlarini loyihalash imkoniyatiga olib keladi, bu esa quvonmaydi. Biroq, o'ndan ortiq eng mashhur veb-ramkalarni (Zend Framework, Adept, CakePHP, CodeIgniter, LIMB, Symfony, MZZ va boshqalar) ko'rib chiqqach, men ba'zi manbalarda elementar yo'qligining keng doirasini topdim. optimallashtirish.

    Ushbu mavzuni texnik jihatdan ko'proq yo'naltirish uchun natijalar yanada qattiqroq shaklda tuziladi, bu esa tushunishni osonlashtiradi.

    Otzhe, ketaylik ... Vazifa juda oddiy: bitta va oyoq ostidagi oyoqlarda qatorlar qatorlarini shakllantirish tezligi bo'yicha tajribalar o'tkazish. Asosan, besleme zanjiri PHP qatorlarini qayta ishlashning o'ziga xos xususiyatlari bilan bog'liq holda uzoq vaqt davomida dolzarb bo'lib qoladi.

    Rus va boshqa tillarda skriptlarni asosiy optimallashtirish bilan bir nechta maqolalar mavjud. Qatorlar haqida juda oz narsa aytilgan, ammo pastki oyoqlardagi qatorlarni ushbu belgilarni o'zgartirish uchun (rasmiy hujjatlarda bo'lgani kabi shifokor) "tahlil qilish" fakti qayd etilgan. Bunga asoslanib, robotning podviynyh panjalaridagi qatorlar soni ko'proq povylniche bo'lishini tan olish mantiqan to'g'ri, bitta panjadagi qatorlar bilan bir xil operatsiya.

    PHP da sprintf funksiyasi bilan qatorlar yaratishning kamida bitta usuli mavjud. Tez bosish funktsiyasidan foydalanish va o'rtadagi qatorni tahlil qilish orqali ushbu usul "standart" bo'lishi kerak deb taxmin qilish mantiqan to'g'ri.

    Yana bir eslatma, bundan oldin men sizga test skriptining kodini taqdim etaman: robotlarning ikkita mumkin bo'lgan variantini pastki panjalardagi qatorlarga aylantirish kerak: oddiy va "tashlangan" kodlash uslubini yaxshilash. Ketma-ket turishga o'tadiganlar uchun hurmat borto emas, yolg'iz - badbo'y hid faqat dumbadir:
    $string = "$_SERVER["HTTP_HOST"] - Ulyanovsk viloyati ma'muriyati emas.
    і
    $string = "($_SERVER["HTTP_HOST"]) - Ulyanovsk viloyati ma'muriyati emas.

    Birinchi raqamli test.
    Xo'sh, birinchi navbatda, barcha ogohlantirishlar buzilgan - ish natijalarini ko'rsatadigan vaqt keldi. Sinovchining chiqish kodi ma'lum bo'lishi mumkin.

    Skrinshotlar mening gipotezam tasdiqlanmaganligini ko'rsatadi. Shuni ta'kidlash kerakki, robot haqida sprintf orqali qatorlar bo'yicha qabul qilingan. Eng muhimi, orqa oyoqlari bilan ishlash mumkin bo'lgan funktsiyalar edi.

    Vaziyatning ahamiyatsiz obmirkovuvannyasidan so'ng, tushuntirish o'z-o'zidan paydo bo'ldi: almashtirishlar qilingan standart qatorning o'ng tomonidagi hamma narsa juda qisqa: tahlilchining bunday qator bo'ylab o'tishi foydasiz. o'ngda. Biroq, bu erda ko'rinib turibdiki, ketma-ket o'zgarishning mahalliy o'rnini bosishi sirpanchiq uslubga ustunlik beradi.
    Buning uchun birlashtirish yondashuvida zaiflik mavjud: kiritilishi kerak bo'lgan ma'lumotlar majburiyatlari, shartnomalar majburiyatlarini qayta ko'rib chiqing. Yulduzlar konnosamentdan olingan, siz uni allaqachon ma'lum bo'lgan habratopikda o'qishingiz mumkin.

    Biroq, bu fikrlarni tasdiqlashingiz kerak. Menga bunday tushunarsiz (men uchun) xatti-harakatlarning sabablarini taxmin qilish imkoniyati o'zgargan yana bir sinov kerak edi. Beshinchi versiyada biroz ko'proq o'zgartirilgan bo'lishi mumkin (tan oling, php ning beshinchi versiyasida men faqat 1 ta test qildim: massivlar elementlarini chetlab o'tish uchun).

    Ikkinchi test.
    Yana bir gipoteza: mos yozuvlar qatorini pasaytirish, ehtimol, test raqamidagi natijaga o'xshash pastki oyoqlarda qatorlarni shakllantirishga bog'langan funksiya-sinovchilarning ish balandligi balandligining oshishiga olib keladi. 1. Bunday holat, nazariy jihatdan, robotning muvaffaqiyati va sf_printingi bilan bog'liq Bu biz uchun zarur bo'lgan satrlarni tahlil qilish va buning uchun bo'yalgan ko'proq soatlar uchundir. Yagona panjalarda qatorni birlashtirish bilan bog'liq vaziyatda, menimcha, siz birinchi sinovdagi kabi taxminan bir xil natijaga erishasiz, bu quotes_3() funktsiyasining bir soatlik ish soatiga ozgina o'zgarishini beradi. butun skript (lekin unumdorlikning oshishi emas).

    Visnovka, bu faqat ijobiy va farazni tasdiqlaydi. Malumot qatorining biroz o'sishi bilan, harakatlanuvchi oyoqlari va sprintf bilan robotlarning svidkod funksiyalarini tushirish uchun katta istak paydo bo'ladi.

    Yagona panjalardagi qatorlarni pasaytirish o'zini ko'rsatdi: birinchi sinov uchun vaqtning 36,75%, boshqasi uchun quotes_3() funktsiyasi skript uchun vaqtning 33,76% ni egalladi.

    Amaliy qiymat.
    Oddiy tilda gapiradigan bo'lsak, ma'lumotlardan abstrakt qilib, siz visnovoks bilan ishlashingiz mumkin: qator qancha ko'p bo'lsa, unda almashtirishni ishlash kerak bo'lsa, operatsiyani birlashtirish qanchalik qulay bo'lsa, ilon shunchalik past bo'ladi. qo'ltiq osti. Ko'ngillilar kerakli kiritish parametrlarini (almashtirishlar soni, standart qatorning uzunligi, almashtirish qatorlarining uzunligi) sinab ko'rishlari mumkin, shunda hid tungi soatlarning bir tekisligidan qoniqadi.

    Eksa, vlasne, va bu hammasi. Dasturlashtirilgan dribnitsa (men "sirniki bo'yicha tejamkorlik" (c) Adelf demoqchi emasman) aytishni yoqtiradiganlarga qo'shadigan yana bir oz narsa bor. Juda nozik bilish va uni hurmat qilish nuqtasiga olib, siz barcha tengdoshlaringizga optimallashtiriladigan kod yozishingiz mumkin;)

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

    PPS:
    Natijalaringizni ushbu testlar bilan baham ko'rishingiz uchun Radium. Menimcha, o'sha chi va boshqa almashtirish usulini tanlash zarurligiga ob'ektiv baho berishga ruxsat berish yaxshiroqdir. Bundan tashqari, tartib va ​​dizayn uslubining sog'lom tanqidchisi bo'laman.

    Saqlash