Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
MicBlack
Člen
Avatar
MicBlack:20.7.2018 9:54

Ahoj,

chtěl jsem se zeptat - k čemu se v php používá 'use'?

Zkusil jsem: Něco jsem si vyhledal na internetu, ale zatím z toho nejsem moc moudrý.

Chci docílit: Rád bych pochopil, kdy ho používat a k čemu? Díky!

 
Odpovědět
20.7.2018 9:54
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na MicBlack
Petr Čech:20.7.2018 10:27

1. Namespace (zdaleka nejpoužívanější)
nemá smysl to rozepisovat, prostě si to najdi, je to tom hromada článků, např .https://code­.tutsplus.com/tu­torials/names­pacing-in-php--net-27203

2. Trait
http://php.net/…5.traits.php

3. "Parametry" anonymních funkcí
Řekněme, že potřebuješ seřadit pole podle vlastního kritéria, a proto použiješ usort. Také předpokládejme, že chceš té funkci přidat vlastní parametr, třeba jestli má řadit v opačném pořadí.
Jedna možnost je takováto:

function cmp($a, $b)
{
    global $inverse; //eww
    if ($a == $b) {
        return 0;
    }

    return $inverse
         ? (($a < $b) ? 1 : -1)
         : (($a < $b) ? -1 : 1);
}
...

$inverse = false;
$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

tedy si vytvoříš skutečnou funkci, jejíž jméno předáš jako parametr - to je ale celkem nešikovné, pokud to je jediné místo, kde tu funkci použiješ, akorát budeš mít zbytečnou globální funkci. Nehledě na to, že pokud to budeš potřebovat vícekrát, budeš muset být kreativní se jmény. Ale největší problém je, jak si předat vlastní parametr - funkce usort předá jen 2 parametry, žádný vlastní předat neumí. Proto sis musel pomoct berličkou global, která si natáhne proměnnou z nadřazeného scope - to je ale docela prasárna.
Tomu se můžeš vyhnout anonymními funkcemi a zapíšeš to takto:

$a = array(3, 2, 5, 6, 1);
$inverse = false;

...
usort($a, function ($a, $b) use ($inverse) {
                            ^^^
    if ($a == $b) {
        return 0;
    }
    return $inverse
         ? (($a < $b) ? 1 : -1)
         : (($a < $b) ? -1 : 1);
});
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
20.7.2018 10:27
the cake is a lie
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:20.7.2018 11:48

Super, to mi pomohlo. Díky!

 
Nahoru Odpovědět
20.7.2018 11:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.