<?php
namespace Concrete\Foo {
class Foo {}
class_alias('\Concrete\Foo\Foo', 'DerpFoo');
}
namespace Concrete\BetterFoo {
use DerpFoo;
class BetterFoo extends DerpFoo {}
}
namespace Concrete\Test {
class Test {
public function __construct(DerpFoo $foo) {}
}
$f = new Test(new \Concrete\BetterFoo\BetterFoo);
}
Fatal error: Uncaught TypeError: Concrete\Test\Test::__construct(): Argument #1 ($foo) must be of type Concrete\Test\DerpFoo, Concrete\BetterFoo\BetterFoo given, called in /in/OQJur on line 25 and defined in /in/OQJur:21
Stack trace:
#0 /in/OQJur(25): Concrete\Test\Test->__construct(Object(Concrete\BetterFoo\BetterFoo))
#1 {main}
thrown in /in/OQJur on line 21
Process exited with code 255.
Fatal error: Uncaught TypeError: Argument 1 passed to Concrete\Test\Test::__construct() must be an instance of Concrete\Test\DerpFoo, instance of Concrete\BetterFoo\BetterFoo given, called in /in/OQJur on line 25 and defined in /in/OQJur:21
Stack trace:
#0 /in/OQJur(25): Concrete\Test\Test->__construct(Object(Concrete\BetterFoo\BetterFoo))
#1 {main}
thrown in /in/OQJur on line 21
Process exited with code 255.
Catchable fatal error: Argument 1 passed to Concrete\Test\Test::__construct() must be an instance of Concrete\Test\DerpFoo, instance of Concrete\BetterFoo\BetterFoo given, called in /in/OQJur on line 25 and defined in /in/OQJur on line 21
Process exited with code 255.