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());
}