Podmienený príkaz if v PHP. Programovanie v strojových kódoch a v assembleri Operácie v slučke

  • 20.06.2020

). Každá značka (sekcia) musí mať pár (/ sekcia). Požadované parametre sú názov A slučka. Názov cyklu (časť) môže byť ľubovoľný, pozostávajúci z písmen, číslic a podčiarkovníkov. Cykly (sekcia) môžu byť vnorené a vnorené názvy (sekcií) musia byť medzi sebou jedinečné. Variabilné slučka(zvyčajne pole hodnôt) určuje počet iterácií cyklu. Pri tlači premenných vnútri sekcie sa názov sekcie musí objaviť vedľa názvu premennej v hranatých zátvorkách. (sekcia) vykoná sa, ak parameter slučka neobsahuje žiadne hodnoty.

Názov atribútu Typ Povinné Predvolené Popis
názov reťazec Áno n/a Názov sekcie
slučka zmiešané Áno n/a Hodnota, ktorá určuje počet iterácií cyklu.
začať celé číslo nie 0 Index pozície, z ktorej začne slučka. Ak je hodnota záporná, počiatočná pozícia sa vypočíta z konca poľa. Napríklad, ak má premenná cyklu 7 prvkov a hodnota počiatočného atribútu je -2, potom počiatočný index bude 5. Neplatné hodnoty (hodnoty mimo poľa) sa automaticky skrátia na najbližšiu platnú hodnotu.
krok celé číslo nie 1 Hodnota kroku, ktorá sa používa na iteráciu cez pole. Napríklad krok=2 určuje, že sa má pole prechádzať prvkami 0,2,4... Ak je krok záporný, pole sa bude prechádzať v opačnom smere.
max celé číslo nie 1 Maximálny počet iterácií slučky.
šou boolovská hodnota nie pravda Určuje, či sa má táto sekcia zobraziť alebo nie

Poznámka

Od Smarty 1.5.0 sa syntax premennej vlastnosti relácie zmenila z (%sectionname.varname%) na ($smarty.section.sectionname.varname). Stará syntax je stále podporovaná, ale uvidíte len príklady novej syntaxe.

index sa používa na zobrazenie aktuálneho indexu poľa, počnúc nulou (alebo štartovacím atribútom, ak bol zadaný jeden) a zvyšovaním o jednotku (alebo hodnotou atribútu step, ak bol zadaný).

Technická poznámka

Ak atribúty step a start nie sú špecifikované, potom je index rovnaký ako atribút sekcie iterácie s tým rozdielom, že začína od 0 namiesto 1.

iterácia sa používa na zobrazenie aktuálneho čísla iterácie cyklu.

Poznámka

Táto hodnota je nezávislá od vlastností start, step a max, na rozdiel od vlastnosti index. Tiež iterácie začínajú na jednotke, nie na nule, ako to robia indexy. rownum je synonymom pre vlastnosť iterácie, fungujú rovnakým spôsobom.

Príklad 7.38. iterácia vlastnosti (sekcie).

priradiť("custid",$id); ?> (názov sekcie=cu loop=$custid start=5 step=2) iteration=($smarty.section.cu.iteration) index=($smarty.section.cu.index) id=($custid)
(/ sekcia)

Výsledok spustenia tohto príkladu:

Iterácia=1 index=5 id=3005
iterácia=2 index=7 id=3007
iterácia=3 index=9 id=3009
iterácia=4 index=11 id=3011
iterácia=5 index=13 id=3013
iterácia=6 index=15 id=3015

Tento príklad používa vlastnosť iteration na zobrazenie hlavičky tabuľky každých päť riadkov (používa (if) s operátorom mod - modulo).

(názov sekcie=co loop=$contacts) (ak $smarty.section.co.itration % 5 == 1) (/if) (/ sekcia)
Meno>DomovbunkaEmail
vyhliadka ($contacts.name) ($contacts.home) ($contacts.cell) ($contacts.email)


Často je vhodné, aby bolo možné slučku predčasne ukončiť, keď nastanú určité podmienky. Prestávka poskytuje takúto príležitosť. Pracuje s takými konštrukciami ako: while, do while, for, foreach alebo switch .

Príkaz break môže mať voliteľný číselný argument, ktorý mu hovorí, koľko vnorených štruktúr sa má ukončiť. Predvolená hodnota číselného argumentu je 1, ktorá ukončí aktuálnu slučku. Ak sa v slučke používa príkaz switch, potom break/break 1 opustí iba príkaz switch.

\n"; prestávka 1; /* Opustenie iba príkazu switch. */ prípad 10: echo "Iterácia 10; odchádzame
\n"; break 2; /* Ukončí príkaz switch a cyklus while. */ ) ) // ďalší príklad pre ($bar1 = -4; $bar1< 7; $bar1++) { // проверка деления на ноль if ($bar1 == 0) { echo "Выполнение остановлено: деление на ноль невозможно."; break; } echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Samozrejme, niekedy by ste radšej jednoducho preskočili jednu z iterácií cyklu, než aby ste cyklus úplne ukončili, v takom prípade sa to robí príkazom continue.

ďalej

Pomocou príkazu continue môžete zastaviť spracovanie aktuálneho bloku kódu v tele cyklu a prejsť na ďalšiu iteráciu. Od príkazu break sa líši v tom, že nezastaví cyklus, ale jednoducho preskočí na ďalšiu iteráciu.

Príkaz continue, ako napríklad break, môže mať voliteľný číselný argument, ktorý určuje, koľko úrovní vnorených slučiek sa preskočí zvyšok iterácie. Predvolená hodnota číselného argumentu je 1, čím sa preskočí iba zvyšok aktuálneho cyklu.

"; pokračovať; ) echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Všimnite si, že počas cyklu bola nulová hodnota premennej $counter preskočená, ale cyklus pokračoval s ďalšou hodnotou.

ísť do

goto je bezpodmienečný prevádzkovateľ pobočky. Používa sa na skok do inej časti programového kódu. Miesto, kam chcete v programe ísť, je označené štítkom (jednoduchým identifikátorom), za ktorým nasleduje dvojbodka. Ak chcete preskočiť, požadovaný štítok sa umiestni za príkaz goto.

Jednoduchý príklad použitia príkazu goto:

Príkaz goto má určité obmedzenia používania. Cieľový štítok musí byť v rovnakom súbore a v rovnakom kontexte, čo znamená, že nemôžete ísť mimo funkcie alebo metódy a nemôžete ísť ani do jednej z nich. Tiež nemôžete skočiť do žiadneho príkazu slučky alebo prepínača. Môže sa však použiť na ukončenie týchto konštrukcií (zo slučiek a príkazu switch). Zvyčajne sa namiesto viacúrovňového breaku používa príkaz goto.

"; ) echo "po slučke - pred štítkom"; // inštrukcia sa nevykoná end: echo "Po štítku"; ?>

Skoky sú potrebné na to, aby ste sa vzdialili od sekvenčného vykonávania programu a začali vykonávať blok z iného miesta. Do veľkej miery sú tieto príkazy ekvivalentné príkazom BASIC GO TO.

Prechody sú:

podmienené a bezpodmienečné;

relatívne a absolútne.

Podmienené prechod sa vykoná (alebo nevykoná) v závislosti od toho, či je alebo nie je splnená nejaká podmienka. Podobná konštrukcia BASIC vyzerá takto:

AK ......... POTOM CHOĎ NA ...........

Bezpodmienečné prechod sa vykoná vždy, keď sa v programe vyskytne. Nie je viazaná žiadnymi podmienkami.

Absolútna skok sa vykoná na zadanú adresu. Adresa (dvojitý bajt) sa uvádza za operačným kódom.

Relatívna skok sa vykoná o niekoľko krokov dopredu alebo dozadu od adresy obsahujúcej inštrukciu nasledujúcu po inštrukcii skoku. Tu je rozsah možných prechodov obmedzený. Môže sa pohybovať od -128 do +127 bajtov a nazýva sa offset. Hodnota posunu o jeden bajt sšpecifikované za operačným kódom. Uvádza sa vždy vo forme dvojdoplnku.

Mnemotechnické povely absolútneho skoku vždy začínajú JP(skok - skok) a relatívny prechod - s JR(skok relatívny - skok je relatívny).

V tejto skupine je 17 tímov a budeme ich zvažovať v štyroch podskupinách.

5.9.1. Absolútne bezpodmienečné príkazy vetvy.

Mnemotechnické pomôcky

Kód

Mnemotechnické pomôcky

Kód

JPnn

C3 n n

JP (HL)

JP(IX)

DD E9

JP(IY)

FD-E9

Príkaz JPnn spôsobí skok na adresu danú dvoma bajtmi nn. Táto adresa sa automaticky načíta do programového počítadla (registračný pár PC) a program pokračuje od tejto adresy.

Tímy JP (HL), JP(IX), JP(IY) použiť nepriame adresovanie. Teda napríklad na povel JP (HL) skok na adresu obsiahnutú v registrovom páre HL.

5.9.2. Relatívny bezpodmienečný skok.

V tejto podskupine je len jeden príkaz: JRs, je jeho kód 18, za ktorým nasleduje hodnota posunu s-128 až +127, uvedené vo forme dvojdoplnku. Pripomeňme, že v tejto podobe napríklad FE (254) neznamená skok o 254 bajtov dopredu, ale skok o 2 bajty späť, t.j. (-2).

Ďalšou vlastnosťou relatívneho prechodu je, odkiaľ začína prechod dopredu alebo dozadu. Pamätajte, že sa nepočíta od adresy, kde sa príkaz nachádzal JR, ale z toho, v ktorom stojí za ním nasledujúci operačný kód, pretože keď sa tím stretol JR, na počítadlo programov PC adresa začiatku nasledujúceho príkazu už bola odoslaná a od nej sa začína odpočítavanie. Napríklad:

Mnemotechnické pomôcky

Adresa (dec.)

Komentár

LD A,FF

Vložte číslo 255 do akumulátora

DEC A

Znížiť A o 1

JR FD

Skok o tri bajty späť

NOP

Použitie relatívnych skokov poskytuje množstvo cenných výhod oproti absolútnym skokom pri písaní aj pri spúšťaní programov. Všimnite si, že vo vyššie uvedenom príklade nie je žiadny odkaz na adresy. Umiestnili sme ho na adresu 60 000, ale ak ho umiestnite inde, bude fungovať úplne rovnako a vykoná rovnaké akcie.

Absencia absolútnych skokov robí podprogram premiestniteľný (pohyblivý). Ak sú v ňom absolútne prechody, stane sa neotočným. Pravda, nesmieme zabúdať, že replikovaná procedúra nemusí umožňovať volanie z iných častí programu (pozri 5.12), alebo pred každým takýmto volaním musí byť uvedené umiestnenie tejto procedúry. Môže byť pridelená špeciálna premenná programu, ktorá označuje umiestnenie procedúry.

Premiestňovateľnosť je pri zapisovaní výhodná, že nemusíte premýšľať nad otázkou, kde bude procedúra umiestnená. A počas prevádzky mu budete môcť prideliť tie oblasti pamäte, ktoré sú pre vás momentálne vhodné, v závislosti od iného prostredia [poznámka 5].

5.9.3. Absolútne podmienené príkazy vetvy.

Tieto príkazy preskočia na zadanú adresu, ak je splnená akákoľvek podmienka. V inštrukčnej sade Z-80 je táto podmienka spojená so stavom príznakov registra F, menovite: nosná vlajka ( C), nulový príznak ( Z), podpísať vlajku ( S) a príznak pretečenia/parity ( P/V).

Mnemotechnické pomôcky

Komentár

J.P. C,nn

DA n n

Skok na danú adresu sa vykoná, ak je zapnutý prenosový príznak.

JP NC,nn

D2 nn

Skok na danú adresu sa vykoná, ak je vymazaný príznak prenosu.

J.P.Z,nn

CA nn

Ak je zapnutý príznak nula, vykoná sa skok na zadanú adresu.

jr nz,nn

C2 nn

Skok na danú adresu sa vykoná, ak je nulový príznak vymazaný.

j.r.p.,nn

F2 nn

Skok na zadanú adresu sa vykoná, ak je zapnutý príznak.

JR M,nn

FA nn

Skok na zadanú adresu sa vykoná, ak je príznak označenia vymazaný.

J.P.O.,nn

E2 nn

Skok na danú adresu sa vykoná, ak je zahrnutý nepárny počet bitov alebo ak nedôjde k pretečeniu.

JP PE,nn

EA nn

Vetva na zadanú adresu sa vykoná, ak je zahrnutý párny počet bitov alebo ak dôjde k pretečeniu.

5.9.4. Relatívne podmienené príkazy vetvy.

Tieto príkazy preskakujú dopredu alebo dozadu o daný počet bajtov v závislosti od stavu príznakov. C A Z.

Mnemotechnické pomôcky

Komentár

JR C,s

38 s

Ísť do s bajtov ak príznak C zapnuté.

JR NC,s

30 s

Ísť do s bajtov ak príznak

C resetovať.

Jr Z,s

28 s

Ísť do s bajtov ak príznak Z zapnuté.

jr nz,s

20 s

Ísť do s bajtov ak príznak Z resetovať.

5.9.5. Komentár k práci s vlajkami.

Nosiť vlajku (OD). Tento príznak je v bite nula registra. F. Udáva, či akumulátor pretiekol alebo nie v absolútnej binárnej aritmetike (t. j. či výsledok sčítania bol väčší ako 255 alebo výsledok odčítania bol menší ako 0). Nie všetky príkazy ovplyvňujú stav tohto príznaku. Vplyv príkazov na rôzne príznaky môžete špecifikovať podľa tabuliek našej "Referencie".

Stručne:

1) Všetky príkazy na sčítanie, odčítanie a porovnanie PRIDAŤ, ADC,SUB, SBC, CP ovplyvniť vlajku prenosu. Zapne sa, ak pri sčítaní došlo k pretečeniu, pri odčítaní došlo k výpožičke, alebo ak bol pri porovnávaní obsah operandu väčší ako obsah akumulátora.

2) Všetky logické príkazy A, ALEBO, XOR resetovať vlajku prenášania.

3) Príkazy Shift (pozri časť 5.14.) ovplyvňujú príznak prenosu.

Nulová vlajka (Z). Tento príznak je v šiestom bite registra F. Zapne sa, ak bol výsledok predchádzajúcej operácie nulový, inak sa vypne.

Všimnite si mnemotechnický rozpor. Nulový príznak je zapnutý a nerovná sa nule keď výsledok operácie nula.

1) Pri práci s jednotlivými registrami je nulový príznak ovplyvnený výsledkami operácií sčítania ( PRIDAŤ, ADC, INC), odčítanie ( SUB, SBC, DEC), porovnania ( CP), ako aj logiku ( A, ALEBO, XOR).

2) Pri práci s párom registrov ovplyvňujú nulový príznak iba aritmetické operácie ADC A SBC.

3) Príkazy na načítanie registrov LD neovplyvňujú nulový príznak, s výnimkou príkazov, ktoré sú pre Spectrum veľmi zriedkavé LD A,I; LD A,R.

4) Na nulový príznak majú vplyv aj príkazy, s ktorými sa zoznámime o niečo neskôr: príkazy shift (Sec.5.14.); príkazy kontroly bitov (5.15.); príkazy na vyhľadávanie blokov (5.16.).

podpísať vlajku (S). Tento príznak je v hornom (siedmom) bite registra F. Zapne sa, ak je výsledok negatívny, a resetuje sa, ak je pozitívny.

Je zaujímavé, že pre operácie vykonávané v dodatočnej binárnej aritmetike sa rovná najvýznamnejšiemu (siedmemu) bitu akumulátora, ktorý tiež určuje znamienko obsahu.

Kľúčové vlastnosti:

1) Pri práci s jednotlivými registrami je príznak znamienka ovplyvnený výsledkami operácií sčítania ( ADD, ADC, INC), odčítanie ( SUB, SBC, DEC), porovnania ( CP), ako aj logiku ( A, ALEBO, XOR).

2) Pri práci s párom registrov je príznak znamenia ovplyvnený iba operáciami ADC A SBC.

3) Príkazy na načítanie registrov LD neovplyvňujú príznak znaku, s výnimkou príkazov LD A, I; LD A,R.

4) Na znakový príznak majú vplyv aj príkazy, s ktorými sa zoznámime o niečo neskôr: príkazy na posun (Sek. 5.14.); príkazy na vyhľadávanie blokov (5.15.).

Príznak pretečenia/rovnomerného (P/V). Tento príznak je v druhom bite registra F. Má dvojaký účel. Pre niektoré inštrukcie indikuje prítomnosť parity v počte zahrnutých bitov, pre iné indikuje prítomnosť pretečenia v dodatočnej binárnej aritmetike v dôsledku operácie.

Vysvetlenie: Pojem parity sa tu nevzťahuje na číslo v akumulátore, ale na počet jeho zahrnutých bitov. Napríklad číslo 33 (0011 0011) má zapnuté štyri bity, a preto je príznak zapnutý, zatiaľ čo číslo 34 (0011 0100) má zapnuté tri bity a príznak je vypnutý.

Termín "pretečenie" sa tu vzťahuje na doplnkovú binárnu aritmetiku. Príznak sa zapne, ak v dôsledku operácie sčítania dôjde k prechodu z čísla v rozsahu 00 ... 7F na číslo v rozsahu 80 ... FF alebo naopak pri odčítaní. Jedným slovom sa zapne, ak podľa pravidiel komplementárnej binárnej aritmetiky dôjde k zmene znamienka obsahu akumulátora, bez ohľadu na to, ktorým smerom.

Môžete presne určiť, ktoré operácie ovplyvňujú tento príznak ako príznak parity, ktoré operácie ovplyvňujú príznak pretečenia a ktoré operácie neovplyvňujú vôbec, môžete použiť tabuľky našej „Referencie ...“.

5.10. Operácie v slučke

V programoch je veľmi často potrebné opakovať nejaký blok výpočtov. n raz. V BASICu sa na tento účel používa operátor slučky:

PRE i= 1 TO n

..............

ĎALŠIE i

Všetko medzi príkazmi FOR a NEXT sa bude opakovať n raz. V tomto prípade parameter i, nazývaný parameter slučky, sa zvýši o jednu pri každom prechode a keď dosiahne n, vykonávanie cyklu sa preruší a program bude pokračovať od príkazu nasledujúceho NEXT.

V strojovom kóde na tento účel slúži výkonný príkaz DJNZ s. Táto inštrukcia patrí do B registra procesora. Keď procesor narazí na túto inštrukciu, zníži register B o jeden, skontroluje, či neobsahuje nulu, a ak sa dosiahne nula, preskočí na s bajtov. Suma kompenzácie s je uvedený v binárnom komplementárnom tvare a prechod môže byť buď vpred alebo vzad, častejšie však, samozrejme, spätný. Výpočty sa opakujú, kým sa v registri B nedosiahne 0.

Mnemotechnická pomôcka - DJNZs; Kód - 10 s.

Vysvetlime si to na príklade.

To už viete, keď procesor narazí na inštrukciu NOP, nerobí nič, t.j. len pauza. Jeho trvanie je 4 hodinové cykly. Trvanie cyklu závisí od frekvencie hlavného kryštálu vášho počítača a môže sa mierne líšiť od stroja k stroju. Ale keďže je to približne 3,5 MHz, trvanie jedného cyklu je zlomok mikrosekundy. Povedzme, že chcete, aby sa procesor zastavil na približne 200 hodinových cyklov. Môžete samozrejme zadať 50 príkazov za sebou NOP, ale to je veľmi drsné a navyše to veľa poškodzuje množstvo voľnej pamäte RAM.

Využijeme možnosť organizácie cyklu výpočtov a opakovaného opakovania príkazu NOP. Podľa tabuliek „Príručky ...“ môžete zistiť, že čas vykonania príkazu DJNZ trvá 13 hodinových cyklov, ak registr S nie 0 a 8 cyklov, ak je 0.

Celkovo, aby pauza trvala približne 200 cyklov, musíte príkaz zopakovať NOP 12 krát:

12*4 + 11*13 + 1*8 = 48 + 143 + 8 = 199

Potom bude postup vyzerať takto:

Mnemotechnické pomôcky

Komentár

NOP

DJNZ 253

Znížte obsah registra B za jednotku

a skok späť o 3 bajty.

5.11. Zásobník príkazov

Tieto inštrukcie umožňujú programátorovi skopírovať obsah párov registrov do zásobníka a naopak ich odtiaľ volať do procesora. Odošlú sa teda dva bajty naraz, t.j. dvojbajtové číslo (zvyčajne adresa, ale nie vždy). Okrem toho sa v tej istej skupine nachádzajú príkazy, ktoré umožňujú výmenu obsahu niektorých registrov procesora.

Zvážte tri podskupiny príkazov v tejto skupine.

5.11.1. Príkazy na ukladanie údajov do zásobníka.

Tieto príkazy začínajú mnemotechnickou pomôckou TLAČIŤ, čo je vhodné pre trochu frivolný ruský ekvivalent „push“ (do ďalekého poľa). Používajú sa teda vtedy, keď je potrebné dočasne uložiť obsah registrových párov až do ďalšej potreby.

Mnemotechnické pomôcky

Kód

Mnemotechnické pomôcky

Kód

PUSH AF

PUSH HL

PUSH BC

PUSH DE

PUSH IX

DD E5

PUSH II

FD-E5

Najprv sa do zásobníka vloží vysoký bajt a potom nízky bajt. Po operácii PUSH sa ukazovateľ zásobníka (reg SP) sa zníži o dve jednotky. Znižuje sa, pretože zásobník "rastie" zhora nadol. Už sme o tom hovorili.

5.11.2. Príkazy na volanie dát zo zásobníka.

Tieto príkazy sa používajú na vybratie údajov zo zásobníka a ich načítanie do požadovaného registra. Je potrebné zdôrazniť, že údaje na zásobníku nie sú viazané na žiadny register. Bez ohľadu na to, z ktorého registra boli vyložené, môžu byť načítané do akéhokoľvek iného registra a vo všeobecnosti neexistuje žiadny fyzický spôsob, ako zistiť, z ktorého registra boli tieto údaje vyložené. Ak je to dôležité, mal by sa o to postarať samotný programátor.

Mnemotechnická pomôcka inštrukcií, ktoré volajú dáta zo zásobníka, začína slovom POP("vystrčiť").

Mnemotechnické pomôcky

Kód

Mnemotechnické pomôcky

Kód

POP AF

POP HL

POP BC

POP DE

POP IX

DD E1

POP IY

FD-E1

5.11.3. Tímyvýmenaspolstoh.

Existujú tri z týchto príkazov. Začínajú mnemotechnickými pomôckami EX(výmena - výmena) a slúžia na odoslanie obsahu registrového páru do zásobníka a odoslanie obsahu vrcholu zásobníka do tohto registrového páru. To isté sa dá urobiť použitím iného registra ako miesta dočasného uloženia, ale použitie pokynov na výmenu to uľahčuje.

Mnemotechnické pomôcky

Kód

EX(SP),HL

EX(SP),IX

DD E3

EX(SP),IY

FD-E3

5.11.4. Poznámky k operáciám zásobníka.

Stoh procesora je stoh stroja. Netreba si ho mýliť so zásobníkom GO SUB, ktorý je organizovaný pri práci v BASICu a slúži na zapamätanie si čísla riadku, z ktorého bol podprogram volaný, a tiež si ho netreba zamieňať so zásobníkom kalkulačky. "Spectrum" má kalkulačku, ktorá je riadená procedúrami umiestnenými v ROM a môže byť použitá pri programovaní v strojových kódoch. Pomerne hlboko sa s tým zoznámime v časti 5.13.

Stoh stroja slúži viac než len ako pohodlné miesto pre programátora na dočasné ukladanie dát. Jeho hlavným účelom je ukladať adresy, z ktorých sa volajú podprogramy. Je to potrebné, aby procesor na konci podprogramu vedel, kam sa musí vrátiť, aby pokračoval vo výpočtoch. V tomto ohľade sa pri práci so stohom od vás vyžaduje určitá starostlivosť.

Ak ste v podprograme, všetko, čo vložíte do zásobníka, musí byť odstránené predtým, ako podprogram opustí volajúci program. Na druhej strane, keďže výstup sa vykonáva na adrese umiestnenej v dvoch bajtoch hornej časti zásobníka, môžete šikovne ovládať logiku programu manipuláciou s číslami umiestnenými v hornej časti zásobníka, najmä to je ako sú organizované zložité výpočty v programoch.

5.12. Volanie podprogramu

V BASICu boli podprogramy volané pomocou príkazu GO SUB a návrat po vykonaní podprogramu bol vykonaný pomocou príkazu RETURN.

V strojovom kóde sú ekvivalentné príkazom ZAVOLAJTE- "výzva" a RET- "návrat".


5.12.1. Volať príkazy.

Výzva môže byť bezpodmienečná alebo sprevádzaná nejakou podmienkou súvisiacou s kontrolou stavu príznakov registra. F. Celkovo existuje 9 príkazov na volanie podprogramov.

Mnemotechnické pomôcky

Premenná $GLOBALS. Asociatívne pole (pole) obsahujúce odkazy na všetky aktuálne definované premenné globálneho rozsahu skriptu. Názvy premenných sú kľúče poľa.

Ak chcete deklarovať globálnu premennú, stačí ju umiestniť do poľa $GLOBALS

$GLOBALS["testkey2"]="hodnota testu2";

Všetky hodnoty premenných poľa $GLOBALS môžete vytlačiť na obrazovku pomocou print_r($GLOBALS); alebo takto:

Foreach ($GLOBALS ako $key=>$value) echo "GLOBALS[.$key."] == ".$value."
";

Premenná $_SERVER.

    Premenná $_REQUEST- asociatívne pole (pole), ktoré štandardne obsahuje údaje premenných $_GET, $_POST a $_COOKIE. Premenné v poli $_REQUEST sa prenášajú do skriptu pomocou metód GET, POST alebo COOKIE, takže im nemožno dôverovať, pretože mohli byť upravené vzdialeným používateľom. Ich prítomnosť a poradie pridávania údajov do zodpovedajúcich polí určuje direktíva variables_order (štandardne je nastavené GPCS).

    Premenná $_SESSION

    Premenná $_ENV. Vyplnené, ak bol skript spustený z príkazového riadku. Pole $_SERVER bude obsahovať všetky premenné z poľa $_ENV.

    Premenná $http_response_header

Podobne ako iné programovacie jazyky má PHP príkazy select. Celkovo existujú tri typy:

  • podmienený výrok ak...inak ;
  • prepínač ;
  • podmienená operácia (?);

Stojí za zmienku, že v PHP neexistuje žiadny bezpodmienečný skok na štítku goto, ale napriek tomu je kľúčové slovo goto rezervované.

V tejto lekcii sa pozrieme na podmienený príkaz if...else a podmienené operácie a ďalšia lekcia sa zameria na prepínač .

Syntax if...else je rovnaká ako v C:

//ak je uslovie pravda, tak sme tu operátor1; //v prípade jedného operátora, operátor2; ...) inak // voliteľné {//ak je uslovie nepravdivé, tak sme tu operátor3; //v prípade jedného operátora, operátor4; // zložené zátvorky sú voliteľné ... } ?>

Poznámky:

  • else - voliteľná časť, ale najčastejšie sa používa, pretože logika si to vyžaduje.
  • Ako je uvedené v komentároch ku kódu, zložené zátvorky () sa nevyžadujú, ak máme iba jeden operátor. Keďže podmienka môže byť pravdivá (1) alebo nepravda (0), vykoná sa operátor1, operátor2 atď., alebo operátor3, operátor4 atď.

Tu je konkrétny príklad v PHP:

//Nastavenie hodnôt premenných$číslo1 = 10; $num2 = 7; if ($num1 > $num2) ( //podmienka je pravdivá, takže sme tu echo "Podmienka je pravdivá, pretože 10 > 7
"; $num1+=$num2; // pridanie $num2 premennej do $num1; echo "\$num1 = ". $num1; // výsledok bude 17) else echo "Keďže je stav pozitívny, nedostaneme sa sem"; // V else je len jeden príkaz else, takže neexistujú žiadne zložené zátvorky ?>

Tu je príklad, kde je konštrukt else vynechaný a podmienka pozostáva z dvoch podmienok:

6) echo "Podmienky sú pravdivé"; //Ďalší príklad: if ($num1 == 10 || $num2 >= 100) echo "Podmienky sú pravdivé"; //Podmienky sú pravdivé vo všetkých prípadoch ?>

Vnorené ak podmienky

Podobne ako C, PHP umožňuje vnorené podmienky:

//ak sú uslovie1 a uslovie2 pravdivé, prejdite sem) inak ( //ak je uslovie1 pravdivé a uslovie2 nepravdivé, potom sme tu) inak ( //ak sú uslovie1 a uslovie2 nepravdivé, prejdite sem } ?>

Ak chcete, môžete do nich napísať ľubovoľný počet if nestings, ale takéto konštrukcie sú veľmi zložité, takže pri ladení programu bude dosť ťažké im porozumieť. Tu je príklad s vnorenými príkazmi if:

// ako výsledok tohto skriptu sa zobrazí správa: // $flag1 je pravda a $flag2 je nepravda ?>

Vnorené podmienky s if...elseif...else

V PHP je možné použiť vnorené podmienené príkazy so schémou: if...elseif...else . Je to oveľa pohodlnejšie, ako urobiť na začiatku súbor podmienok a potom k nim veľa ďalších. Syntax konštrukcie if...elseif...else je nasledovná:

V takejto konštrukcii môže byť else napísané iba raz, ale elseif toľko, koľko chcete. Tiež sa predpokladá, že vyššie uvedená konštrukcia je horšia ako prepínač.

Použitie príkazu endif

Takmer každý engine vytvorený v PHP používa príkaz endif. Štruktúra tohto operátora je uvedená nižšie:

... html značky a obsah; ... ... html značky a obsah; ...

Stojí za to venovať pozornosť pohodlnosti tejto konštrukcie, ako keby sme celý obsah vydávali cez echo. Po podmienke si nezabudnite dať dvojbodku!

Používanie podmienených operácií (?)

Používanie podmienených operácií nie je bežným prístupom nielen v PHP, ale ani v iných podobných jazykoch, no netreba na ne zabúdať. Syntax pre podmienenú operáciu je nasledovná:

Najprv príde nejaká podmienka. Ak je to pravda, vykoná sa príkaz_1, inak príkaz_2. Myslím si, že konštrukcia nie je veľmi jasná, takže stojí za to uviesť pár príkladov PHP na objasnenie. Napríklad pomocou podmienenej operácie môžete jednoducho implementovať modul čísla:

Podmienené operácie môže byť výhodné použiť v niektorých krátkych výrazoch, kde potrebujete zmeniť hodnotu iba jednej premennej, v závislosti od toho, akej podmienky.