Error Identifier: class.implementsInternalClass
Every error reported by PHPStan has an error identifier. Here’s a list of all error identifiers. In PHPStan Pro you can see the error identifier next to each error and filter errors by their identifiers.
Code example #
<?php declare(strict_types = 1);
// In vendor/some-package/src/InternalInterface.php:
// /** @internal */
// interface InternalInterface {}
// In your code:
class MyClass implements \SomePackage\InternalInterface
{
}
Why is it reported? #
The class implements an interface that is marked as @internal. Internal interfaces are not part of the package’s public API and may change or be removed without notice in future versions. Depending on internal interfaces in your code makes it fragile and prone to breaking when the dependency is updated.
How to fix it #
Use only public, non-internal interfaces from the package. Check the package documentation for the intended public API:
<?php declare(strict_types = 1);
-class MyClass implements \SomePackage\InternalInterface
+class MyClass implements \SomePackage\PublicInterface
{
}
If no public alternative exists, consider reaching out to the package maintainers to request a public API for your use case.
How to ignore this error #
You can use the identifier class.implementsInternalClass to ignore this error using a comment:
// @phpstan-ignore class.implementsInternalClass
codeThatProducesTheError();
You can also use only the identifier key to ignore all errors of the same type in your configuration file in the ignoreErrors parameter:
parameters:
ignoreErrors:
-
identifier: class.implementsInternalClass
Rules that report this error #
- PHPStan\Rules\InternalTag\RestrictedInternalClassNameUsageExtension [1]