website/errors/selfOut.internalInterface.md
<?php declare(strict_types = 1);
namespace Vendor {
/** @internal */
interface InternalInterface {}
}
namespace App {
class Builder {
/**
* @phpstan-self-out \Vendor\InternalInterface
*/
public function build(): void {}
}
}
The @phpstan-self-out PHPDoc tag references an interface that is marked as @internal. Internal interfaces are not part of the public API of their package and may change or be removed without notice. Using internal types in @phpstan-self-out annotations creates a fragile dependency on implementation details.
Use a public (non-internal) interface in the @phpstan-self-out tag:
class Builder {
/**
- * @phpstan-self-out \Vendor\InternalInterface
+ * @phpstan-self-out \Vendor\PublicInterface
*/
public function build(): void {}
}
If the interface is internal to the same package, the error will not be reported. The @internal restriction only applies to cross-package usage.