// Atributy jsou určitou formou metadat pro funkce. Hack přidává některé vestavěné
// atributy které aktivnují uživatečné chování funkcí.
// Speciální atribut __Memoize způsobí, že výsledek funkce je uložen do cache
<<__Memoize>>
function doExpensiveTask() : ?string
{
return file_get_contents('http://example.com');
}
// Tělo funkce je v tomto případě vykonáno pouze jednou:
doExpensiveTask();
doExpensiveTask();
// Speciální atribut __ConsistentConstruct signalizuje typové kontrole Hacku, že
// zápis __construct bude stejný pro všechny podtřídy.
<<__ConsistentConstruct>>
class ConsistentFoo
{
public function __construct(int $x, float $y)
{
// ...
}
public function someMethod()
{
// ...
}
}
class ConsistentBar extends ConsistentFoo
{
public function __construct(int $x, float $y)
{
// Typová kontrola Hacku zajistí volání konstruktoru rodičovské třídy
parent::__construct($x, $y);
// ...
}
// Anotace __Override je volitelný signál pro typovou kontrolu Hacku, že
// tato metoda přetěžuje metodu rodičovské třídy, nebo traitu. Bez uvedení
// této anotace vyhodí typová kontrola chybu.
<<__Override>>
public function someMethod()
{
// ...
}
}
class InvalidFooSubclass extends ConsistentFoo
{
// Nedodržení zápisu dle rodičovského konstruktoru způsobí syntaktickou chybu:
//
// "Tento objekt je typu ConsistentBaz a není kompatibilní v tímto objektem,
// který je typu ConsistentFoo protože některé jeho metody nejsou kompatibilní."
//
public function __construct(float $x)
{
// ...
}
// Použitím anotace __Override na nepřetíženou metodu způsobí chybu typové kontroly:
//
// "InvalidFooSubclass::otherMethod() je označená jako přetížená, ale nebyla nalezena
// taková rodičovská metoda, nebo rodič kterého přetěžujete není zapsán v <?hh kódu"
//
<<__Override>>
public function otherMethod()
{
// ...
}
}
// Traity mohou implementovat rozhraní, což standardní PHP neumí
interface KittenInterface
{
public function play() : void;
}
trait CatTrait implements KittenInterface
{
public function play() : void
{
// ...
}
}
class Samuel
{
use CatTrait;
}
$cat = new Samuel();
$cat instanceof KittenInterface === true; // True
```
## Více informací
Pro více informací navštivte [referenční příručku jazyka Hack](http://docs.hhvm.com/manual/en/hacklangref.php),
kde se dozvíte více detailu a vylepšení, které jazyk Hack přidává do PHP, a nebo navštivte [oficiální stránky jazyka Hack](http://hacklang.org/)
pro obecné informace.
Pro instrukce k instalaci jazyka Hack navštivte [oficiální HHVM stránky](http://hhvm.com/).
Pro více informací ohledně zpětné kompatibility s PHP navštivte článek o [nepodporovaných PHP vlastnostech Hacku](http://docs.hhvm.com/manual/en/hack.unsupported.php).