Menu

← Back to class.*

Error Identifier: class.allowDynamicPropertiesReadonly

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);

#[\AllowDynamicProperties]
readonly class Foo
{
	public function __construct(
		public string $name,
	)
	{
	}
}

Why is it reported? #

The #[\AllowDynamicProperties] attribute cannot be used with readonly classes. Readonly classes have all their properties implicitly declared as readonly, and dynamic properties are inherently incompatible with readonly semantics because dynamic properties cannot be declared as readonly. PHP will emit a fatal error at runtime.

In the example above, Foo is a readonly class with the #[\AllowDynamicProperties] attribute, which is not allowed.

How to fix it #

Remove the #[\AllowDynamicProperties] attribute from the readonly class:

 <?php declare(strict_types = 1);
 
-#[\AllowDynamicProperties]
 readonly class Foo
 {
 	public function __construct(
 		public string $name,
 	)
 	{
 	}
 }

If you need dynamic properties, remove the readonly modifier from the class and declare specific properties as readonly individually instead:

 <?php declare(strict_types = 1);
 
 #[\AllowDynamicProperties]
-readonly class Foo
+class Foo
 {
 	public function __construct(
-		public string $name,
+		public readonly string $name,
 	)
 	{
 	}
 }

Non-ignorable error #

This error cannot be ignored using @phpstan-ignore or the ignoreErrors configuration. Non-ignorable errors indicate code that would cause a crash or a fatal error at runtime, or a fundamental problem in the analysed code that must be addressed.

Rules that report this error #

  • PHPStan\Rules\Classes\ClassAttributesRule [1]

Edit this page on GitHub

Theme
A
© 2026 PHPStan s.r.o.