<?php
class Base {
public static function test(self $obj) : self {
echo get_class($obj) . "\n";
if (!$obj instanceof static) {
throw new InvalidArgumentException(sprintf(
"Object (%s) must be an instance of %s",
get_class($obj),
static::class
));
}
return new static($obj);
}
}
class Ext extends Base {}
$base = new Base;
$ext = new Ext;
Base::test($base);
Base::test($ext);
Ext::test($ext);
Ext::test($base);
Base
Ext
Ext
Base
Fatal error: Uncaught InvalidArgumentException: Object (Base) must be an instance of Ext in /in/Tp7k6:8
Stack trace:
#0 /in/Tp7k6(28): Base::test(Object(Base))
#1 {main}
thrown in /in/Tp7k6 on line 8
Process exited with code 255.