Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Diskuze: 'use' statement - k čemu se používá?

Aktivity (2)
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
Redaktor
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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 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  +1 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.