Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
MicBlack
Člen
Avatar
MicBlack:20. července 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. července 9:54
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na MicBlack
Petr Čech:20. července 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. července 10:27
the cake is a lie
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:20. července 11:48

Super, to mi pomohlo. Díky!

 
Nahoru Odpovědět  +1 20. července 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.