When a PHP class is marked as final and readonly, it means that:
- All class properties are implicitly
readonly(because of the class being marked asreadonly); - The class cannot be extended (because of the class being marked as
final).
For example, let's suppose you have the following final readonly class:
// PHP 8.2+
final readonly class Shape {
public function __construct(
public string $name,
public int $sides,
) {}
}
You could use it in the following way:
$shape = new Shape('triangle', 3);
echo $shape->name . ' has ' . $shape->sides . ' sides'; // "triangle has 3 sides"
If you try to assign a value to any object property, it would throw the following error (as all properties are implicitly readonly):
// PHP 8.2+
// Fatal error: Uncaught Error: Cannot modify readonly property Shape::$name
$shape->name = 'circle';
If you try to extend the class, then it would throw the following error (as the class is marked as final):
// Fatal error: Class Triangle cannot extend final class Shape
readonly class Triangle extends Shape {}
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.