- class_alias: documentation ( source)
- explode: documentation ( source)
- array_pop: documentation ( source)
- sprintf: documentation ( source)
<?php
final class Collection {
/** @var string */
private $type;
/**
* @param string $type
* @return Collection
*/
public static function ofType($type)
{
$collection = new static();
$collection->type = $type;
$class = explode('\\', $type);
class_alias(self::class, sprintf('%sCollection', array_pop($class)));
return $collection;
}
}
final class Person {}
$col = Collection::ofType(Person::class);
function parsePersonCollection(PersonCollection $coll)
{
}
parsePersonCollection($col);