IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

3. diel - Štandardy jazyka PHP - PSR-2 časť druhá

V minulej lekcii, Štandardy jazyka PHP - PSR-2 časť prvá , sme si začali vysvetľovať štandard PSR-2, teda príručku štýlom písania kódu. Dnes opis tejto príručky dokončíme.

Metódy

Pre metódy platia podobné pravidlá ako pre vlastnosti.

U všetkých metód MUSÍ byť deklarovaná viditeľnosť.
Názvy privátnych a chránených metód by NEMALI byť predsadené podčiarknikom.
Metódy NESMIE byť deklarované s medzerou za názvom metódy. Zložené zátvorky MUSÍ byť na samostatnom riadku. Za ľavú guľatou zátvorkou NESMIE byť medzera a rovnako tak NESMIE byť medzera ani pred pravou.
Deklarácia metód vyzerá nasledovne. Všimnite si umiestnenie zátvoriek, čiarok a medzier:
<?php
namespace Vendor\Package;

class ClassName
{
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {
        // tělo metody
    }
}

Argumenty metódy

V zozname argumentov metódy NESMIE byť pred žiadnou čiarkou medzera a za každú čiarkou MUSÍ byť medzera.
Argumenty metódy s východiskovou hodnotou MUSÍ byť deklarované ako posledný.
Deklaráciu vidíme na príklade vyššie.
Zoznam argumentov MÔŽE byť rozdelený na viac riadkov, pričom je každá raz odsadená. Ak tak urobíme, každý argument MUSÍ byť na samostatnej riadku, vrátane prvého.
Argumenty rozdelíme na samostatné riadky ak by sa riadok s deklaráciou metódy nevošiel do 80tich znakov.
Pri rozdelení deklarácia argumentov na viac riadkov MUSÍ byť pravá guľatá zátvorka a ľavá zložená zátvorka na jednom riadku a medzi nimi MUSÍ byť jedna medzera.
<?php
namespace Vendor\Package;

class ClassName
{
    public function aVeryLongMethodName(
        ClassTypeHint $arg1,
        &$arg2,
        array $arg3 = []
    ) {
        // tělo metody
    }
}

Abstract, final a static

Ukážme si v akom poradí zapisovať modifikátory metód.

Ak použijeme kľúčové slová abstract a final, MUSÍ byť uvedené pred deklaráciou viditeľnosti.
Ak použijeme kľúčové slovo static, MUSÍ byť uvedené za deklaráciou viditeľnosti.
<?php
namespace Vendor\Package;

abstract class ClassName
{
    protected static $foo;

    abstract protected function zim();

    final public static function bar()
    {
        // tělo metody
    }
}

Volanie metód a funkcií

Pri volaní metód NESMIE za názvom metódy alebo funkcie nasledovať medzera. Medzera NESMIE byť ani okolo okrúhlych zátvoriek. V zozname argumentov NESMIE byť medzera pred čiarkami a za nimi MUSÍ byť jedna medzera.
<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);

S rozdelením argumentov na viac riadok je to rovnaké ako pri deklarácii metód:

Zoznam argumentov MÔŽE BYŤ rozdelený do viacerých riadkov, kedy každý riadok raz odsadíme. Ak tak urobíme, každý argument MUSÍ byť na samostatnom riadku vrátane prvého.
<?php
$foo->bar(
    $longArgument,
    $longerArgument,
    $muchLongerArgument
);

Riadiace štruktúry

Základné pravidlá pre riadiace štruktúry sú nasledovné:

Za kľúčovým slovom riadiacej štruktúry MUSÍ nasledovať medzera.
Za ľavú guľatou zátvorkou a pred pravou guľatou zátvorkou NESMIE byť medzera.
Medzi pravú guľatou zátvorkou a ľavú zloženú zátvorkou MUSÍ byť medzera.
Telo štruktúry MUSÍ byť raz odsadené.
Pravá zložená zátvorka MUSÍ byť na samostatnom riadku za telom štruktúry.
Telo každej štruktúry MUSÍ byť obsiahnuté v zložených zátvorkách.
Zaujímavá je posledná poučka. Napr. telo podmienky is jediným príkazom teda musíme vkladať do zložených zátvoriek:
if ($promenna) {
    echo('Platí');
}

Dôvodom je, aby sa predišlo chybám pri pridaní ďalších príkazov do tela podmienky.

If, ElseIf a else

Sekvencia if ... ElseIf ... else by teda mala vyzerať nasledovne. Všimnite si umiestnenie zátvoriek a medzier. A tiež toho, že else a ElseIf sú na rovnakom riadku ako pravá zložená zátvorka.

<?php
if ($expr1) {
    // tělo podmínky
} elseif ($expr2) {
    // tělo elseif
} else {
    // tělo else
}
Namiesto dvoch slov else if by sme MALI použiť kľúčové slovo ElseIf, aby boli všetky riadiace kľúčové slová tvorená práve jedným slovom.

Switch a case

Uveďme si ako vyzerá štruktúra switch. Opäť si všimnite zátvoriek a medzier.

Príkaz case MUSÍ byť vnútri raz odsadený. Kľúčové slovo break (alebo iné ukončujúce slovo) MUSÍ byť odsadené rovnako, ako telo case. Ak medzi case zámerne používame prepadávaniu (vynecháme break), MUSÍME to zdôrazniť komentárom.
<?php
switch ($expr) {
    case 0:
        echo 'První případ s break';
        break;
    case 1:
        echo 'Druhý případ, který propadne';
        // chybí break
    case 2:
    case 3:
    case 4:
        echo 'Třetí případ obsahuje return místo break';
        return;
    default:
        echo 'Výchozí případ';
        break;
}

Opomenutie break je častejšie chybou než zámerom a preto by sme do kódu mali uviesť, že sme ho opomenuli zámerne.

While a do while

Cyklus while zapisujeme takto:

<?php
while ($expr) {
    // tělo struktury
}

Podobne vyzerá aj konštrukcie do while:

<?php
do {
    // structure body;
} while ($expr);

For

For cyklus zapíšeme podobne:

<?php
for ($i = 0; $i < 10; $i++) {
    // tělo cyklu
}

Foreach

<?php
foreach ($iterable as $key => $value) {
    // tělo cyklu
}

Bloky try a catch

Podoba blokov try a catch je nasledujúci:

<?php
try {
    // tělo try
} catch (FirstExceptionType $e) {
    // tělo catch
} catch (OtherExceptionType $e) {
    // tělo catch
}

Uzávery (CLOSURES)

Zvyšok špecifikácia opisuje ako deklarovať tzv. CLOSURES (slovensky uzávery). Sú to anonymné funkcie, ktoré môžeme deklarovať kdekoľvek v kóde a uložiť ich napr. Do premenných alebo je odovzdať ako argument metóde.

Uzávery MUSÍ byť deklarované s medzerou za kľúčovým slovom function a s medzerou pred a za kľúčovým slovom use.
Ľavá zložená zátvorka MUSÍ byť na rovnakom riadku ako deklarácia closure. Pravá MUSÍ byť na samostatnom riadku.
Okolo okrúhlych zátvoriek s argumentmi NESMIE byť medzery.
V zozname argumentov NESMIE byť medzera pred žiadnou čiarkou a za všetkými čiarkami MUSÍ byť medzery.
Argumenty s východiskovou hodnotou MUSÍME zapísať ako posledný.
Deklarácia uzáveru vyzerá takto:
<?php
$closureWithArgs = function ($arg1, $arg2) {
    // tělo
};

$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
    // tělo
};
Zoznam argumentov a premenných MÔŽEME rozdeliť na niekoľko riadkov, kedy každú raz odsadíme. Ak tak urobíme, každá položka MUSÍ byť na samostatnej riadku vrátane tej prvej.
Ak je zoznam (argumentov alebo premenných) rozdelený na viac riadkov, MUSÍ byť pravá guľatá zátvorka a ľavá zložená zátvorka na rovnakom riadku s jednou medzerou medzi nimi.
Nasledujú ukážky uzáverov s / bez argumentov / premenných a so zoznamom rozdeleným na viac riadkov.
<?php
$longArgs_noVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) {
   // tělo
};

$noArgs_longVars = function () use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // tělo
};

$longArgs_longVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // tělo
};

$longArgs_shortVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) use ($var1) {
   // tělo
};

$shortArgs_longVars = function ($arg) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // tělo
};

Pravidiel sa držíme aj v prípade, keď sa uzáver používa priamo vo volaní funkcie alebo metódy ako argument:

<?php
$foo->bar(
    $arg1,
    function ($arg2) use ($var1) {
        // tělo
    },
    $arg3
);

V budúcej lekcii, Štandardy jazyka PHP - PSR-3 a špecifikácie loggeru , sa konečne zameriame na PSR-3, ktorá sa venuje logovanie.


 

Predchádzajúci článok
Štandardy jazyka PHP - PSR-2 časť prvá
Všetky články v sekcii
Štandardy jazyka PHP
Preskočiť článok
(neodporúčame)
Štandardy jazyka PHP - PSR-3 a špecifikácie loggeru
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity