Diskuze: 'use' statement - k čemu se používá?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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/tutorials/namespacing-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);
});
Zobrazeno 3 zpráv z 3.