/**
* @psalm-inheritors FooClass|BarClass
*/
class BaseClass {}
class FooClass extends BaseClass {
public function thing(string $s) : void { return $s . "hello"; }
}
class BarClass extends BaseClass {
public function thing(int $i) : string { return $i . "hello"; }
}
class BazClass extends BaseClass {} // this is an error
function f1(BaseClass $c) : string {
switch (get_class($c)) {
case FooClass:class:
return $c->thing("me");
case BarClass:class:
return $c->thing(5);
}
}
function f2(BaseClass $c) : string { // this is an error as not all paths are met
switch (get_class($c)) {
case FooClass:class:
return $c->thing("me");
}
}