Psalm
Get started
Documentation
Paid support
Plugins
Blog
GitHub
<?php /** * @template T */ class Collection { /** * @param list<T> $items */ public function __construct(public array $items) {} } class Animal {} class Cat extends Animal {} class Dog extends Animal { public function bark(): void {} } /** @param Collection<Animal> $animals */ function takesAnimalCollection(Collection $animals): void { $animals->items[] = new Cat(); } $dogs = new Collection([new Dog()]); takesAnimalCollection($dogs); foreach ($dogs->items as $dog) { $dog->bark(); }
Snippet created on March 10 2022 at 17:50 UTC
Settings
Get link