Neodvolateľná správa php. PHP knižnica pre prácu s Yandex.Money API. Boolean je nepravda, inak je pravdivá

  • 03.11.2019

PHP je najpopulárnejší jazyk na písanie kódu na strane servera. Rovnaký cieľ možno na ňom dosiahnuť niekoľkými spôsobmi: môžete navrhnúť krásny a ľahko udržiavateľný systém alebo môžete rýchlo poskladať kúsky kódu zo Stack Overflow bez toho, aby ste sa museli príliš starať o také veci, ako sú pravidlá dizajnu a čitateľnosť kódu.

Samozrejme, aj keď ešte nie ste vývojový guru, stále budete chcieť napísať kód, ktorý ostatných nerozplače. Tproger vám pomôže - tento článok obsahuje 20 tipov, z ktorých každý vám pomôže zlepšiť čitateľnosť kódu a za dodržiavanie ktorých vám neskôr poďakujeme. A z dlhodobého hľadiska vám dôsledné dodržiavanie týchto rád pomôže priblížiť sa k statusu skúseného a pozorného vývojára.

Použite

Nepoužívaťa ďalšie spôsoby umiestnenia php skriptov do súboru. Áno, možno vám všetko funguje, ale na inom serveri to nie je pravda. Na niektorých serveroch sú krátke značky úplne zakázané. Neriskujte, len používajte

// Nesprávne// Nesprávne

Oddeľte súbory s parametrami

Neexistuje dostatočne dobrý dôvod na to, aby sa ospravedlňovalo ukladanie nastavení do rovnakého súboru ako skript. Vždy vytvorte samostatný súbor a vložte ho na úplný začiatok skriptu. Pochopíte, aké dôležité je to, keď budete musieť upraviť veľa súborov kvôli zmene jedného parametra. Je to naozaj celkom jednoduché:

include("config.php");

Komentáre sú vaši priatelia

Samozrejme, ak sa ponáhľate alebo zadávate kód na vlne inšpirácie, komentárom to už akosi nebude stačiť. Ale kód napísaný už dávno je ťažko pochopiteľný – aj keď ste ho napísali vy. Radšej si pomôžte niekoľkými komentármi na kľúčových miestach, potom skrátite čas na pochopenie ďalšieho skriptu.

// Jednoriadkový komentár /** Viacriadkový komentár **/

Naozaj, len? Mali by ste tiež venovať pozornosť PHPDoc .

Naformátujte svoj kód múdro

Nie je nič horšie ako obrovská stena kódu, ktorej autor evidentne nevedel o existencii tlačidla Tab. Ani komentáre nezachránia – odsadenie bolo vynájdené s cieľom logicky oddeliť fragmenty kódu od seba. A to, či používate alebo nepoužívate odsadenie, o vás ako o programátorovi veľa vypovedá. Tento kód nie je správne naformátovaný:

Funkcia dothisformula($a,$b) ( $c = $b+$a; $e=3; while ($c< 20) { $e = $e - 1; $c = $c + 1; } return $e; }

A toto je ten istý kód, ale so správnym formátovaním:

Funkcia dothisformula($a, $b) ( $c = $b + $a; $e = 3; while ($c< 20) { $e = $e - 1; $c = $c + 1; } return $e; }

Ak chcete presne vedieť, akým spôsobom formátovať kód správny- Prečítajte si PSR.

Dajte premenným zmysluplné názvy

Samozrejme, v tejto otázke nie je možné dosiahnuť konsenzus. camelCase alebo under_score? Potrebujete maďarskú notáciu? Jedna vec je tu dôležitá: raz a navždy sa rozhodnite, čo je vám bližšie. A aj keď chcete zmeniť štýl, nerobte to uprostred projektu! Variabilné možnosti pomenovania v rovnakom projekte, alebo ešte horšie, v rovnakom súbore, sú hrozné. A žiadne magické čísla! Pokojne použite konštanty.

Inicializovať premenné

Samozrejme, PHP automaticky vytvára premenné, keď sa k nim pokúšate dostať. Nemyslíte si však, že používanie tejto funkcie je dosť riskantné? Je dobrou praxou vždy inicializovať premenné pred prvým použitím. Vďaka tomu bude kód prehľadnejší a pomôže vám to zabezpečiť, aby ste sa náhodou nedostali k neinicializovanej premennej.

$foo = pole(); $bar = 0; $bas = nepravda;

Boolean je nepravda, inak je pravdivá

Ak skontrolujete nejakú podmienku a potom uložíte výsledok porovnania do booleovskej hodnoty, pri inicializácii premennej pre výsledok (premennú vždy inicializujeme vopred, pamätáte?), najprv ju nastavte na false . To znamená, že nemusíte robiť toto:

Funkcia getStatus() ( $výsledok = pravda; if ($i != 2) $výsledok = nepravda; návrat $výsledok; )

Lepšie takto:

Funkcia getStatus() ( $výsledok = nepravda; if ($i == 2) $výsledok = pravda; návrat $výsledok; )

Prečo je toto? Predstavte si, že overujete údaje pred dotazom na databázu. Ak sa z nejakého dôvodu blok if náhle nevykoná, potom hodnota premennej zostane false - takto sa poistíte proti tomu, aby ste sa dostali do databázy chybných údajov. Kód sa niekedy musí zaoberať citlivými údajmi, takže je najlepšie najprv predpokladať, že všetky údaje sú nesprávne, kým sa nepreukáže opak. Toto pravidlo je prakticky napísané krvou.

Mimochodom, je lepšie kontrolovať, či sú dáta také, aké potrebujeme, ako či sú také, aké nepotrebujeme.

Pri odkazovaní na prvky poľa použite úvodzovky

V kóde rôznych vývojárov môžete vidieť dve možnosti prístupu k prvkom asociatívneho poľa:

$name = $names["mark"]; $meno = $mená;

Pri vykonávaní druhej možnosti sa PHP najskôr pokúsi nájsť konštantu s názvom marc . A iba ak tam nie je, mark sa skonvertuje na reťazec a odovzdá sa ako taký. Je lepšie nemyslieť na to, čo by sa mohlo stať, keby takáto konštanta zrazu existovala ... Vždy dávajte úvodzovky, aby sa to nestalo.

Na označenie viacerých riadkov v rámci jedného hovoru použite čiarky

Ak sa napríklad potrebujete odkazovať na hodnotu premennej a na reťazec v jednom volaní funkcie, je lepšie použiť čiarky, nie bodky. prečo? Bodka je operátor zreťazenia reťazcov, táto operácia bude pomalšia. Dôkaz .

Opäť. Je teda potrebné:

echo "Ahoj, volám sa ", $meno;

A tu je to, čo nepotrebujete:

echo "Ahoj, volám sa". $meno;

Použite ternárne operátory

Ak máte vo svojom kóde nejaké veľmi jednoduché porovnanie, je vhodné použiť ternárny operátor, aby sa jednoduchý kód nenatiahol na niekoľko riadkov. Takto môže vyzerať váš jednoduchý ak:

Ak ($a == 1) $b = 2; inak $b = 3;

Ale môžete to napísať aj takto:

$b = ($a == 1) ? 2:3;

Zovšeobecnený ternárny operátor funguje takto:

$premenná = ($podmienka) ? pravda lož;

Na porovnanie s boolovskými hodnotami použite prísne porovnanie

Ak testujete premennú na true alebo false , použite === namiesto == , ktorý sa používa v iných porovnaniach. Striktné porovnanie troch rovnakých znakov porovná aj typy premenných.

If ($isMember == true) ( ​​​​... ) // Nesprávne, ak ($isMember === true) ( ​​​​... ) // Správne

Použite zvýšenie a zníženie

Ak potrebujete iba zvýšiť alebo znížiť hodnotu premennej o 1, nie je potrebné písať túto ťažkopádnu konštrukciu:

$cislo = $cislo + 1; $číslo2 = $číslo2 - 1;

Oveľa výstižnejšie je toto:

$číslo++; // Zvýšenie $číslo2--; // Zníženie

A hlavným kúzlom týchto operácií je, že súčasne s nimi možno vykonať nejakú inú akciu (napríklad ak alebo kým). V závislosti od toho, či je pred alebo za samotným názvom premennej napísané -- alebo ++, sa mení poradie operácií.

// Prírastok nastane po porovnaní: $číslo = 10; while ($číslo++ == 10) ( ... ) // A tu dôjde k zníženiu pred porovnaním: $číslo = 10; if (--$číslo == 10) ( ... ) $číslo = 10; $celkom = $cislo++; // $celkom bude 10. $cislo = 10; $celkom = --$cislo; // $celkom bude 9.

Použite skratkové operátory priradenia

Ak je potrebné premennú zvýšiť alebo znížiť o číslo, ktoré sa nerovná 1, v tomto prípade je možné kód skrátiť. Vo svojom kóde môžete mať napríklad niečo takéto:

$a = $a + $b; $a = $a * 5; $a = $a - $d; $a = $a / 3;

A pomocou skratkových operátorov možno rovnaký kód napísať takto:

$a += $b; $a *= 5; $a -= $d; $a /= 3;

Mimochodom, toto funguje aj so strunami. Ak potrebujete pridať nejakú časť k existujúcemu reťazcu, urobte to takto:

$string = $string . "Ahoj"; $string .= "ahoj";

Vytvorte samostatnú funkciu pre var_dump

Niekedy je potrebné pri aktívnom ladení často zobrazovať hodnotu niektorej premennej priamo na stránke. Samozrejme, je lepšie to už nerobiť, ale ak to stále potrebujete, potom má zmysel pomôcť si. Funkcia môže vyzerať takto:

Funkcia d($var) ( echo "

"; var_dump($var); echo "
"; }

Predznačka sa používa na zvýšenie čitateľnosti hodnoty. Mimochodom, taký zvláštny názov funkcie nebol daný náhodou - je krátky, aj keď nie zrejmý. Jeho názov bude napísaný rýchlo. Len potom nezabudnite túto funkciu odstrániť pri čistení kódu na konci vývoja.

Ale najlepšie je zabudnúť na túto radu a naučiť sa používať XDebug.

Použite konštanty

Ak máte premennú, ktorej hodnota by sa nemala meniť, má zmysel použiť namiesto nej konštantu. Konštanty možno použiť na ukladanie ciest, chybových hlásení atď. Názvy konštánt by mali byť uvedené veľkými písmenami - takto ich bude ľahké rozlíšiť a budete mať istotu, že voláte, čo potrebujete.

Define("ADRESÁR", "/cesta/k/stránke/"); echo ADRESÁR;

Použite $_GET a $_POST

$_REQUEST by sa nemal používať. Jasne oddeľte údaje: $_GET sú parametre odovzdané z adresného riadku, $_POST sú napríklad údaje prijaté z formulára. A nepokúšajte sa preniesť heslá do skriptu, najmä nešifrované, s požiadavkou GET!

$akcia = $_GET["akcie"]; $name = $_POST["meno"];

Používatelia môžu manuálne nahradiť hodnoty v paneli s adresou ľubovoľnými ľubovoľnými hodnotami a spôsobiť vám veľa problémov.

Používajte objekty, nie funkcie

PHP je predsa len objektovo orientovaný jazyk. Ak pracujete na veľkom projekte, stovky riadkov funkčného kódu vás určite rýchlo omrzia. A ak potrebujete uložiť veľa parametrov rovnakého typu, o to viac myslite na použitie vhodnej triedy.

Call Methods in Chains

Ak voláte niekoľko metód toho istého objektu za sebou, má zmysel skrátiť kód tak, že zakaždým nevypíšete názov tohto objektu. Ak existuje taká trieda:

Class User ( function setThis($var) ( .... return $this; ) funkcia setThis2($var2) ( .... return $this; ) )

... potom môžete pristupovať k jeho metódam takto:

$user = novy User(); $user->setThis(...) ->setThis2(...);

Ak chcete lepšie pochopiť, ako funguje a za akých okolností ho môžete použiť, prečítajte si.

Neopakuj sa

Kód, ktorý vo funkcii použijete viac ako raz alebo dvakrát, vždy zabaľte. Ak to neurobíte, projekt sa nafúkne a bude pozostávať z množstva riadkov rovnakého typu.

Usilujte sa o voľnú súdržnosť a silnú súdržnosť

Spojka je spôsob navrhovania projektu, kde zmena jedného komponentu vyžaduje zmenu druhého. Inými slovami, ak zmeníte jednu funkciu, budete musieť zmeniť ďalšiu? Čím je spojenie voľnejšie, tým ľahšie bude výmena komponentov bez toho, aby ste museli hádzať polovicu kódu.

Na druhej strane súdržnosť je, keď jednotlivé časti spolu tvoria zmysluplný celok. Máte pre celý projekt jednu funkciu alebo metódu, ktorá robí všetko možné aj nemožné, alebo existuje veľa funkcií či metód, z ktorých každá vykonáva svoju vlastnú prácu? To platí najmä pre OOP. Deliť metódy, magické metódy na desiatky a stovky riadkov nie sú povolené.

Ako skúsený programátor by ste sa mali snažiť zabezpečiť, aby súčiastky na sebe málo záviseli a nezaberali príliš veľa práce. Takýto kód bude oveľa jednoduchšie rozšíriť a udržiavať. Pri vytváraní funkcie myslite na to, aké pohodlné je to pre budúce projekty.

Túto radu možno ilustrovať nasledovne. Zoberme si tento kód:

/* Chceme pridať dve čísla iba vtedy, ak je prvé číslo menšie ako 5 */ function add($var, $var2) ( if ($var< 5) return false; else $result = $var + $var2; echo "The Result is ", $result; } $var = 3; $var2 = 2; add($var, $var2);

Hlavnou nevýhodou tejto funkcie je, že sama vykonáva overenie údajov a potom zobrazuje hodnotu na obrazovke. Áno, a takéto správanie nie je úplne samozrejmé – musíte uznať, že takýto selektívne fungujúci doplnok pravdepodobne nikde inde nebudete potrebovať. A ak chcete zmeniť aj správu pre výstup? Tento kód by bolo lepšie prepísať takto:

Funkcia add($var, $var2) ( return $var + $var2; ) function result($message) ( return "Výsledok je " . $správa; ) $var = 3; $var2 = 2; if ($var< 5) { echo result(add($var, $var2)); }

Teraz každá funkcia vykonáva svoju vlastnú úlohu: sčítanie sčíta čísla, výsledok vytlačí výsledok.

3,3 tis

Zobrazovanie správ používateľovi je pomerne bežná akcia, ktorú by mala webová aplikácia vykonávať. Môže sa to stať pri spracovaní formulárov, môžu to byť chybové hlásenia, správy, ktoré hovoria, že sa musíte zaregistrovať, keď sa používateľ pokúsi o prístup k zakázanej časti stránky a v mnohých ďalších prípadoch.

Veľmi často je vytváranie a výstup správ oddelené rôznymi požiadavkami HTTP. Spravidla je vhodné použiť presmerovanie po spracovaní formulárov (aby sa predišlo problémom s tlačidlami Späť a Obnoviť), ale zároveň je prirodzeným momentom pre vytvorenie správy práve moment spracovania formulárov a vykonávanie činností, ktoré ho sprevádzajú. prečo? Predstavte si, že text správy by mal vyzerať asi takto: "Počet objednaných jednotiek položky 'Mouse Pad' bol úspešne zmenený zo 7 na 12." Po presmerovaní možno na stránku, ktorá je z hľadiska funkčnosti úplne iná, to bude hlava navyše – určiť, čo sa robilo predtým.

Najčastejšie sa správy zobrazujú v žiadosti POST, ktorá spracováva formulár - to nie je dobré, nápisy "táto stránka je neaktuálna" kazia život (keď chce používateľ vyskúšať tlačidlo Späť).

Niekto používa presmerovanie a vzdáva sa priateľských správ.

Zároveň existuje jednoduchý a zrejmý spôsob, ako zlepšiť život. Napriek očividnosti som z nejakého dôvodu nikdy nevidel nikoho, kto by to používal - aspoň keď som sa pozrel na zdroje iných ľudí.

Takže máme problém - správa by mala "žiť" v rôznych požiadavkách. Potrebujeme mechanizmus na odovzdanie textu správy stránke, ktorá by ho mala zobraziť. Pravdepodobne ste si už spomenuli na relácie.

Áno, vo všeobecnosti máte pravdu. Iné metódy, napríklad prostredníctvom globálnej premennej, neumožňujú ukladanie údajov v prípade, že sa používa presmerovanie (poznámka Maxima Naumenka). Navyše sa zvyčajne uistím, že každá obrazovka v aplikácii má možnosť spolu s ďalšími informáciami zobrazovať správy, ktoré boli vygenerované na predchádzajúcich obrazovkách. Je to pohodlné, pretože nie je potrebné pripravovať samostatné obrazovky na zobrazovanie správ a používateľ nemusí znova klikať myšou. Ale v skutočnosti tu musí dizajnér premýšľať - zdôrazniť oblasť, v ktorej by sa správy objavili.

Myšlienka je veľmi jednoduchá a dá sa implementovať pomocou niekoľkých tried.

Prvá vec, ktorá vám príde na myseľ, je vytvoriť triedu Message, ktorá by v skutočnosti predstavovala správu na našom jednoduchom diagrame tried. Správa sa musí dať v relácii sama uložiť, ako aj zobraziť na obrazovke.

class Správa ( /** * Obsah správy. */ var $content; /** * Konštruktor na inicializáciu textu správy. * * @param content content message */ function Message($content) ( $this->content = $content ; ) /** * Napíšte správu do relácie */ funkcia send() ( $_SESSION["session_messages"] = $this->content; ) /** * Pošlite správu na stránku */ funkcia toPage() ( echo "-" . $this->content ."
"; } }

Premenná $_SESSION sa používa na prístup k relácii.

Všimnite si, že $_SESSION je pole, používame iba jeden prvok tohto poľa s indexom 'session_message'.

V tomto prípade máme do činenia s "polom polí" - to, čo ukladáme do elementu 'session_message', je pole, toto je zoznam prenášaných správ (môže ich byť samozrejme viacero).

Ak ste vlákno nenašli, je čas oprášiť časti manuálu o reláciách a poliach.

Možno máte otázku. Prečo sú tu potrebné triedy? Dalo by sa vystačiť s dvomi funkciami. Ale pozrime sa ďalej. Možno budeme musieť vytvoriť správy s rôznymi typmi (informačné, chybové, varovné), definovať príjemcov správy.

Všimnite si, že momentálne sa do relácie nevkladá samotný objekt, ale iba text správy. OOP nám umožňuje v budúcnosti zmeniť správanie metódy send() bez zmeny kódu klienta, ktorý túto metódu volá (napríklad v budúcnosti možno do relácie zapísať celý objekt Message, ak má veľa polí).

Predstavme si, že by sme to robili pomocou funkcií. Pravdepodobne by sme mali funkciu message_send($txt) a tiež by sme mali funkciu message_to_page($txt). Teraz musíme pridať možnosť rôzneho správania pre rôzne typy správ. Zmena volania funkcie: message_send($txt, $druh), message_to_page($txt, $druh). Pri hľadaní takýchto funkcií budete musieť prečesať celý kód aplikácie a vykonať opravy.

Tomu sa dá predísť predvídaním situácie vopred tak, že správu predstavíte ako asociatívne pole: $msg['txt'], $msg['kind'], potom bude vo volaniach funkcií len jeden parameter. Cítite, ako sa to mení na triedu?

No, OOP vám dáva ten luxus, že si veci nemusíte dopredu premýšľať.

Ďalšia trieda – Inbox – je práve na tento účel.

class Inbox ( /** * Pole prichádzajúcich správ. */ var $messages = array(); /** * V konštruktore získajte všetky prichádzajúce správy * a odstráňte ich z relácie. */ funkcia Inbox() ( ak (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->správy = nová správa($messages[$i]); ) ) /* vymaže pole správ */ $_SESSION["session_messages"] = pole(); ) /** * Zobrazenie obsahu priečinka Doručená pošta na stránke. */ function toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Správa zo systému:
"; ) pre ($i = 0; $i< $co; $i++) { $this->správy[$i]->ToPage(); )))

Poďme otestovať náš systém správ.

Vytvorme si veľmi jednoduchý príklad, ktorý ako odpoveď na odoslanie formulára ohlási počet sekúnd v aktuálnej minúte.

odoslať (); /* presmerovanie na seba */ header("location:"); ) else ( $inbox = new Inbox(); $inbox->toPage(); ) ?>

Všetku prácu s poliami a reláciami sme skryli do tried a konečný kód vyzerá jednoducho a krásne.

Vytvorte adresár na webovom serveri, potom v ňom vytvorte tieto tri súbory a vyskúšajte skript. Upozorňujeme, že s tlačidlami Späť a Obnoviť nie sú žiadne problémy.

Teraz si predstavte, že vytvárate komplexný portál, kde je na stránkach spravidla niekoľko blokov a každý môže obsahovať samostatnú aplikáciu.

Tu narážame na dve ťažkosti:

* Chcel by som, aby sa zoznam správ zobrazoval v určitej časti stránky a už ste na to našli vhodné miesto.
Problém je v tom, že príkaz $inbox->toPage() musíte spustiť presne v momente, ktorý by zodpovedal pozícii zoznamu správ na stránke. Ak chceme zmeniť pozíciu tohto zoznamu, budeme sa musieť dostať do kódu, ale nie je dobré na to neustále meniť framework portálu. Najlepším riešením by bolo urobiť výstup správ vo forme samostatného modulu, ktorý je známy len tým, že je pripojený k frameworku.
Teda zbaviť sa striktnej postupnosti spúšťania modulov. Skutočne, keďže výsledok výstupu doručenej pošty nezávisí od prevádzky systému (v tomto kroku už máme všetky dáta v relácii), tak prečo tá extra zložitosť?
* Aby ste zachovali vzhľad (dizajn) zoznamu správ, musíte sa postarať o HTML kód, ktorý sme zaviedli do metód toPage () tried Message a Inbox. Spravidla budete musieť zmeniť kód PHP, aby ste zmenili dizajn.

Ak sa chcete pokúsiť vyriešiť prvý problém, môžete vytvoriť vyrovnávaciu pamäť, ktorá bude uchovávať výsledok výstupu doručenej pošty.

Možno ešte budeme mať niekoľko podobných vecí (ako Inbox) a budeme musieť vytvoriť systém vyrovnávacích pamätí. Aby sme neplietli, kde je koho výstup, prídeme asi k pomenovaniu bufferov. Niekde budeme mať uloženú postupnosť, v súlade s ktorou by mal prebiehať výstup bufferov - najlepšie v externom súbore, aby bolo jednoduchšie vykonávať zmeny.

Už tento pokus o riešenie nám dáva myšlienku použiť XML ako prostriedok na ukladanie prechodných údajov. A použitie štýlov XSLT pomôže vyrovnať sa s druhým problémom.

Nebudem sa venovať tomu, čo je XML a čo XSLT. Ak nie ste oboznámení s týmito vecami, zvon.org je dobrým východiskovým bodom pre učenie.

Cieľom je netvoriť HTML kód, ale XML štruktúru v metódach toPage(). Stránkový dokument bude vytvorený ako reťazec s XML kódom (bude slúžiť ako „buffer“) a v poslednej fáze skriptu použijeme XSL transformáciu.

Na začiatok si predstavte, čo by malo byť výsledkom práce hlavnej časti kódu.

minúta 57 druhý: 45

Čo to je - to sa dá celkom ľahko uhádnuť - dve správy a formulár. Všimnite si, že PHP skript potrebuje iba pripraviť tento reťazec – je to veľmi jednoduché. Okrem toho nie je dôležité poradie hlavných značiek - možno umiestniť napríklad na začiatok, pretože to bude výhodné pre programátora. Ako to implementovať. Je možné, takmer bez toho, aby sa čokoľvek menilo, použiť ukladanie do vyrovnávacej pamäte na výstupe, namiesto HTML kódu vydávať XML a na konci jednoducho zachytiť výstup do reťazca. Potom však stratíme flexibilitu – niekedy napríklad chcete zobraziť informácie o ladení priamo na stránke (pomocou echa). Vývojári PHP zároveň pracujú na module DOM, ktorý ponúka pokročilejší spôsob vytvárania a odovzdávania stromových dokumentov. Ak chceme vložiť DOM, budeme musieť prerobiť celú aplikáciu, pričom zmeníme výstup reťazcov na vytvorenie prvkov DOM. Preto uprednostňujem ukladanie XML reprezentácie objektov v rámci samotných objektov, čím vytváram celkový XML dokument postupne. Nie je to také ťažké, je potrebná len malá úprava. Uvidíte, že táto technika nie je striktne viazaná na konkrétny spôsob ukladania údajov XML, čo vám umožní prejsť na používanie DOM „s malým krviprelievaním“. V prvom rade si všimnite, že každý z našich objektov má metódu toPage(). Táto podobnosť by nás mala prinútiť zamyslieť sa nad zavedením novej spoločnej rodičovskej triedy. Nech každá trieda, ktorá je schopná vytvárať časti XML dokumentu pre stránku, zdedí od triedy, ktorá sa postará o XML reprezentáciu objektu. Nazvime to Outputable.

class Outputable ( /** * XML kontajner (reťazec). */ var $output = ""; /** * Zadajte obsah kontajnera a vymažte kontajner. * * @return string s údajmi XML */ funkcia getOutput( ) ( $ out = $this->output; $this->output = ""; return $out; ) /** * Pripojiť časť k obsahu kontajnera. * * @param reťazec reťazca na pripojenie */ function appendOutput($string) ( $this ->output .= $string ."n"; ) /** * metóda "Abstract".*/ function toPage() ( ) )

Metóda toPage() je prázdna – v tomto prípade je potrebná ako indikátor toho, ako majú vonkajšie triedy „matriošky“ komunikovať s vnútornou triedou. Tu by sa však dala navrhnúť predvolená implementácia, ak by sme si všimli, že existuje veľa objektov, ktoré sa na stránke zobrazujú rovnakým spôsobom.

Triedy Message a Inbox sa trochu zmenia - teraz by obe mali dediť z Outputable a zmenia sa aj metódy toPage ().
message.php

class Message extends Outputable ( /** * Obsah správy. */ var $content; /** * Konštruktor na inicializáciu textu správy. * * @param content content message content */ function Message($content) ( $this->content = $content; ) /** * Napíšte správu do relácie */ funkcia send() ( $_SESSION["session_messages"] = $this->content; ) /** * Pošlite správu na stránku */ function toPage () ( $this->appendOutput(" ".$this->obsah.""); } }

class Inbox extends Outputable ( /** * Pole prichádzajúcich správ. */ var $messages = array(); /** * V konštruktore získajte všetky prichádzajúce správy * a odstráňte ich z relácie. */ funkcia Inbox() ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->správy = nová správa($messages[$i]); ) ) /* vymaže pole správ */ $_SESSION["session_messages"] = pole(); ) /** * Zobrazenie obsahu priečinka Doručená pošta na stránke. */ function toPage() ( $co = sizeof($this->messages); $this->appendOutput(" "); pre ($i = 0; $i< $co; $i++) { $this->správy[$i]->toPage(); $this->appendOutput($this->správy[$i]->getOutput()); ) $this->appendOutput(""); } }

Metóda výstupu sa zmenila – teraz namiesto priameho výstupu na stránku sa externá reprezentácia zatiaľ ukladá do Outputable, ktorá „sedí“ v každom z objektov. Metóda appendOutput() slúži ako druh náhrady za konštrukciu echo(). Na získanie výstupu objektu sa používa metóda getOutput().

Teraz sa pozrime, aká je klientska časť kódu, ktorá vyrieši rovnakú úlohu ako predtým.
index.php

odoslať (); /* aktuálna sekunda */ $msg_sec = new Message("second: " . date("s")); $msg_sec->send(); /* presmerovanie na seba */ header("location:"); východ; ) else ( /* pripraviť zoznam správ ako XML */ $inbox = new Inbox(); $inbox->toPage(); $global_content->appendOutput($inbox->getOutput()); ) $global_content->appendOutput (" "); $xml_string = $global_content->getOutput(); $xh = xslt_create(); $xarg = array(); /* Hlavička dokumentu XML */ $xarg["xml"] = ""."n"; /* telo dokumentu XML */ $xarg["xml"] .= " " . $xml_string .""; /* šablóna XSL */ $xarg["xsl"] = implode("", súbor("style.xsl")); /* výstup HTML kódu - výsledok transformácie XSL */ echo xslt_process($xh , " arg:xml", "arg:xsl", NULL, $xarg); /* výstup zdroja XML (ladenie) */ echo "


" .htmlspecialchars($xml_string) ."
"; ?>

Hlavná inovácia je v objekte $global_content, ktorého názov hovorí sám za seba. V tomto prípade patrí do triedy Outputable, v reálnom živote by ste zrejme vytvorili samostatnú triedu pre obsah stránky.

Ak sa pozriete pozorne, obsah skriptu sa príliš nezmenil - rovnaká schránka, rovnaká toPage(). Pridaná inštrukcia, ktorá vypíše obsah zoznamu správ do obsahu stránky. Pre zmenu sa teraz generujú dve správy.

Aby ste sa mohli pozrieť na výsledok, zostáva len pripraviť šablónu XSL.
style.xsl

Príklad XSLT

správu

čo sme dosiahli?

V prvom rade sa môžete odvážnejšie pustiť do zložitých projektov – je zabezpečená skutočná nezávislosť modulov. Poradie skladania výsledkov na stránke je teraz riadené externou šablónou XSL a nezávisí od poradia, v ktorom sa moduly spúšťajú.

Akýkoľvek modul, ktorý generuje XML dáta ako výsledok svojej práce, môže byť použitý v projekte. To je mimochodom jedna z výhod oproti šablónovým enginom, pri ktorých tvorba dát spočíva v postupnosti volania metód (priradenie a pod.) konkrétneho enginu, ktoré nemajú spoločný štandard.

Ďalšou výhodou je ľahké ladenie. Ak spustíte skript, všimnete si, že každá stránka má výstup ladenia, prototyp XML, ktorý značne uľahčuje ladenie aplikácií.

Ďalšia vec, na ktorú treba myslieť, je, ako vytvoriť objekty správ. Nie je vždy vhodné použiť nové priamo v klientskom kóde. Ale možno je to téma na samostatný článok.

Nakoniec cval o vyhliadkach:

* vyskakovacie okná so zoznamom dôležitých správ
* „Stránky odosielateľa“ a „Cieľové stránky“ v správach
* protokolovanie správ do databázy
* tlačidlo "zobraziť históriu mojich akcií"
* štatistická analýza akcií používateľov v rámci relácií
* „inteligentní asistenti“ vo webových aplikáciách

    svojvôľa, svojvôľa, svojvôľa, svojvôľa. (hovorový). Svojvoľne konať, svojvoľne konať. Vysvetľujúci slovník Ushakov. D.N. Ušakov. 1935 1940 ... Vysvetľujúci slovník Ushakov

    AUTORIZOVANÝ, ayu, aesh; nekompatibilita (hovorový). Konať svojvoľne. Vysvetľujúci slovník Ozhegov. S.I. Ozhegov, N.Yu. Švedova. 1949 1992 ... Vysvetľujúci slovník Ozhegov

    Nesov. neperekh. rozvinúť Konaj podľa svojej vôle, podľa svojho rozmaru. Vysvetľujúci slovník Efraima. T. F. Efremová. 2000... Moderný výkladový slovník ruského jazyka Efremova

    svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, svojvoľne, ... ... Podoby slov

    svojvoľne- klamať sám seba, ayu, aet ... ruský pravopisný slovník

    svojvoľne- (ja), samovolno / lenivý, čaj, čaj ... Pravopisný slovník ruského jazyka

    Aju, áno; nsv. Razg. Konať podľa vlastného želania, podľa vlastného rozmaru, bez toho, aby sme od niekoho žiadali dovolenie. S. je preč. S. v práci. Buďte doma sebestační. ◁ Vlastná vôľa, ja; porov. Bez svojvôle, prosím, inak ťa vyhodím! … encyklopedický slovník

    svojvoľne- áno, áno; nsv.; rozvinúť pozri tiež svojvôľa Konať podľa vlastného želania, podľa vlastného rozmaru, bez toho, aby sme od kohokoľvek žiadali dovolenie. Samovo/lnichat preč. Samovo / lenivý v práci. Cíť sa ako doma... Slovník mnohých výrazov