IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

5. diel - Dokončenie knižnice StringUtils v PHP

V minulej lekcii, Knižnica StringUtils pre prácu s textom v PHP , sme rozpracovali knihovať StringUtils pre prácu s textovými reťazcami. Dnes knižnicu dokončíme.

Prevod na pomlčky

Často potrebujeme napr. Z názvu článku vytvoriť URL alebo z názvu užívateľa emailovú adresu. Na tento účel si vytvoríme metódu hyphenize (Hyphen označuje pomlčku).

public static function hyphenize($text)
{
    return preg_replace("/\-{2,}/u", "-", preg_replace("/[^a-z0-9]/u", "-", mb_strtolower(self::removeAccents($text))));
}

Metóda zo vstupu odstráni diakritiku a prevedie ho na malé písmená. Čokoľvek, čo nie je znak, je ďalej prevedené na pomlčky. Aby neboli niekde dve pomlčky vedľa seba, je výstup obalený ešte jedným regulárnym výrazom.

Vyskúšajme:

echo(StringUtils::hyphenize('Programujeme v JavaScriptu objektově') . '<br />');
echo(StringUtils::hyphenize('Jan Novák') . '@nejakaadresa.cz');

výsledok:

PHP knižnica StringUtils – Prevod na pomlčky - Knižnice pre PHP

Prevody menných konvencií

Na každú technológii sa viažu určité konvencie, ktoré by sme mali dodržiavať. Napr. názvy id a tried sa v HTML / CSS píšu zvyčajne s spojovníkom, rovnako ako URL adresy. Naopak kľúče polí v PHP sa často píšu s podtržníkmi, rovnako ako názvy databázových tabuliek a stĺpcov v MySQL databáze. Názvy tried v PHP píšeme CamelCase.

Tieto konvencie nie sú žiadne dogma a mnoho ľudí si ich prispôsobuje (napr. Majú databázovej tabuľky alebo HTML identifikátory v CamelCase). Niekedy je prispôsobenie výhodné, niekedy je však lepšie medzi rôznymi mennými konvenciami prevádzať. Uveďme si jeden príklad za všetky. V našom MVC frameworku zadávame názov kontroleru do URL adresy, ktorá vyzerá takto:

http://nejakaadresa.cz/vypis-clanku

PHP si adresu naparsuje az parametra potrebuje vytvoriť inštanciu triedy VypisClankuKon­troler, ktorá požiadavku spracuje. Buď musí adresa vyzerať ako:

http://nejakaadresa.cz/VypisClanku

alebo použijeme prevodné funkciu z pomlčiek (hyphens) na CamelCase, čo je čistejšie a URL potom vyzerá ako URL a trieda je pomenovaná ako trieda.

CamelCase a PascalCase

CamelCase je niekedy chápaný ako len s malým začiatočným písmenom (ako CamelCase) a ak je počiatočná veľké, označuje sa táto notácie ako PascalCase. Iste by sme mohli urobiť všetky prevodné funkcie ako pre CamelCase, tak pre PascalCase. Aby však knižnica zbytočne nenakysol, riešil som to dobrovoľným parametrom u daných funkcií.

Najprv si vytvorme dve privátne metódy:

private static function convertToCamel($text, $separator, $uncapitalize = true)
{
    $result = str_replace(' ', '', mb_convert_case(str_replace($separator, ' ', $text), MB_CASE_TITLE));
    if ($uncapitalize)
        $result = self::uncapitalize($result);
    return $result;
}

private static function convertFromCamel($text, $separator)
{
    return ltrim(mb_strtolower(preg_replace('/[A-Z]/', $separator . '$0', $text)), $separator);
}

convertToCamel () prevedie čokoľvek na CamelCase pomocou zvoleného separátora (napr. so separátorom "-" a textom "vypis-clanku" vráti "VypisClanku"). Najprv prevedieme separátory na medzery, čím získame slová. Vďaka funkcii mb_convert_case () môžeme teraz slovám zväčšiť prvé písmeno. Medzery následne nahradíme za prázdny string, čím sa slová spojí do jedného. Prvé písmeno tu ešte prevedieme na malé, pokiaľ nie je dobrovoľný parameter false.

convertFromCamel () naopak prevedie CamelCase na reťazec s malými písmenami a sa separátory medzi slovami. Veľké písmená pomocou regulárneho výrazu predsadíme separátorom, následne reťazec prevedieme na malé písmená a zmažeme separátor na začiatku reťazca pomocou LTrim ().

Základ prevodov máme. Teraz si napíšete zopár verejných funkcií, ktoré budú tento základ používať:

public static function hyphensToCamel($text, $uncapitalize = true)
{
    return self::convertToCamel($text, '-', $uncapitalize);
}

public static function snakeToCamel($text, $uncapitalize = true)
{
    return self::convertToCamel($text, '_', $uncapitalize);
}

public static function camelToHyphens($text)
{
    return self::convertFromCamel($text, '-');
}

public static function camelToSnake($text)
{
    return self::convertFromCamel($text, '_');
}

Podľa názvu by malo byť jasné čo ktorá metóda robí. Poďme si ich vyskúšať:

echo(StringUtils::hyphensToCamel('vypis-vsech-clanku', false) . '<br />');
echo(StringUtils::snakeToCamel('cislo_popisne', false) . '<br />');
echo(StringUtils::camelToHyphens('VypisClanku') . '<br />');
echo(StringUtils::camelToSnake('CisloPopisne') . '<br />');

výsledok:

PHP knižnica StringUtils – Prevody medzi CamelCase a snake_case - Knižnice pre PHP

Generovanie hesiel

Naši knihovníčku dokončí metódou pre generovanie hesiel. Tá sa nám hodí napr. Keď používateľ svoje heslo zabudne a my mu chceme vygenerovať nové. Autorom kódu je sczdavos, vzdávajme mu hold :)

Najprv si vytvorme pomocnú metódu randomString ().

private static function randomString($from, $to, $length)
{
    $str = '';
    if ($length > 1)
        $str .= self::randomString($from, $to, --$length);
    return $str . chr(rand(ord($from), ord($to)));
}

Metóde zadáme rozsah pomocou dvoch znakov (napr. "A" a "Z") a dĺžku reťazca. Vráti reťazec o požadovanej dĺžke, ktorý obsahuje ASCII znaky v danom rozsahu. Metódu hneď využijeme v už verejnej metóde generatePassword ():

public static function generatePassword($addSpecialChar = false)
{
    $numbers = self::randomString('0', '9', 2);
    $lowerCase = self::randomString('a', 'z', 2);
    $upperCase = self::randomString('A', 'Z', 2);
    $specialChars = array('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '.', ',');
    $password = $numbers . $lowerCase . $upperCase;
    if ($addSpecialChar)
        $password .= $specialChars[array_rand($specialChars)];
    return str_shuffle($password);
}

Metóda si pripraví niekoľko reťazcov (2 čísla, 2 malé písmená, 2 veľké písmená) a ak je dobrovoľný parameter true, tak i špeciálny znak). Tieto reťazce potom náhodne spoja do jedného reťazca funkcií str_shuffle ().

Skúsme si vygenerovať niekoľko hesiel:

for ($i = 0; $i < 5; $i++)
{
    echo(StringUtils::generatePassword($i > 2) . '<br />');
}

Prvé 3 sú bez špeciálnych znakov, ďalšie 2 s nimi.

výsledok:

PHP knižnica StringUtils – Generovanie hesiel - Knižnice pre PHP

Okomentovanou knižnicu StringUtils máte v prílohe, nech vám robím radosť :) Nabudúce si v lekcii Knižnica ArrayUtils pre prácu s poľami v PHP vytvoríme knižnicu pre ľahké generovanie HTML kódu.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 513x (4.18 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php

 

Predchádzajúci článok
Knižnica StringUtils pre prácu s textom v PHP
Všetky články v sekcii
Knižnice pre PHP
Preskočiť článok
(neodporúčame)
Knižnica ArrayUtils pre prácu s poľami v PHP
Č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