build/extracted-examples/guides/hack/07-traits-and-interfaces/04-trait-and-interface-requirements/trait-good.hack (34 lines of code) (raw):

// WARNING: Contains some auto-generated boilerplate code, see: // HHVM\UserDocumentation\MarkdownExt\ExtractedCodeBlocks\FilterBase::addBoilerplate namespace HHVM\UserDocumentation\Guides\Hack\TraitsAndInterfaces\TraitAndInterfaceRequirements\TraitGood; abstract class Machine { public function openDoors(): void { return; } public function closeDoors(): void { return; } } interface Fliers { public function fly(): bool; } trait Plane { require extends Machine; require implements Fliers; public function takeOff(): bool { $this->openDoors(); $this->closeDoors(); return $this->fly(); } } class AirBus extends Machine implements Fliers { use Plane; public function fly(): bool { return true; } } <<__EntryPoint>> function run(): void { \init_docs_autoloader(); $ab = new AirBus(); \var_dump($ab); \var_dump($ab->takeOff()); }