build/extracted-examples/guides/hack/07-traits-and-interfaces/02-implementing-an-interface/MyCollection.hack (27 lines of code) (raw):

// WARNING: Contains some auto-generated boilerplate code, see: // HHVM\UserDocumentation\MarkdownExt\ExtractedCodeBlocks\FilterBase::addBoilerplate namespace HHVM\UserDocumentation\Guides\Hack\TraitsAndInterfaces\ImplementingAnInterface\MyCollection; interface MyCollection { const MAX_NUMBER_ITEMS = 1000; public function put(int $item): void; public function get(): int; } class MyList implements MyCollection { public function put(int $item): void { /* implement method */ } public function get(): int { /* implement method */ return 0; } // ... } class MyQueue implements MyCollection { public function put(int $item): void { /* implement method */ } public function get(): int { /* implement method */ return 0; } // ... } function process_collection(MyCollection $p1): void { /* can process any object whose class implements MyCollection */ $p1->put(123); } <<__EntryPoint>> function main(): void { \init_docs_autoloader(); process_collection(new MyList()); process_collection(new MyQueue()); }