Cannot use the %s modifier on a %s¶
Description¶
This is a generic error message for cases where a keyword cannot be used with a class structure. For example, a class constant cannot be abstract or static.
A special case is using final on a parameter: final is reserved for properties, although properties may be promoted, and also used as a parameter in a constructor. Then, it is not possible to declare the property final, or in the constructor.
final for class constant was also unavailable in PHP 8.0, and it is now a feature.
Example¶
<?php
class X {
private final const A = 1;
private abstract const B = 1;
private static const C = 1;
function __construct (
final public $p = 1
) {}
}
?>
Literal Examples¶
Cannot use the final modifier on a class constant
Cannot use the abstract modifier on a class constant
Cannot use the static modifier on a class constant
Cannot use the final modifier on a parameter
Solutions¶
Remove the option from the class constant definition.
Upgrade to PHP 8.1 or later, for
finalon class constants.
In previous PHP versions, this error message used to be Cannot use ‘static’ as constant modifier.