Можно ли управлять фантомными типами в Псалме, используя @param-out
вместо this
или self
? Пример:
/**
* @template T
*/
class Foo
{
/**
* @param T $t
*/
public function __construct($t)
{
$this->t = $t;
}
/**
* WRONG:
* @param-out Test<S> $this
*/
public function test()
{
// Also this doesn't work:
$this->t = new S();
}
}
Примером использования для этого может быть, например, класс файла с фантомным типом, установленным на Open
или Closed
, а вызов $file->open();
изменяет T
на Open
.