Introduction
*************
This RFC proposes a new feature in PHP: type guards for classes (or
interfaces). This feature aims to simplify and standardize the process of
verifying that a variable is an instance of a specific class, enhancing code
readability and reducing boilerplate code.
Motivation
*************
Currently, in PHP, to ensure that a variable is an instance of a specific
class, developers need to use the `instanceof` operator and manually throw
an exception if the check fails. This results in repetitive boilerplate code
scattered throughout the codebase. A new syntax, `(ClassName) $variable`, is
proposed to streamline this process by performing an instanceof check and
throwing a `TypeError` if the variable is not an instance of the specified
class.
Proposal
***********
Introduce a new type guard syntax for classes:
```php
(Foo) $variable;
```
This syntax will internally perform the following operations:
1. Check if `$variable` is an instance of `Foo`.
2. If the check fails, throw a `TypeError` with a message indicating the
expected and actual types.
Example:
Consider the following class definition:
```php
class Foo {
// class definition
}
```
To ensure a variable is an instance of `Foo`, instead of writing:
```php
if (!$variable instanceof Foo) {
throw new TypeError('Expected instance of Foo, got ' . gettype($
variable));
}
```
Developers can use the new type guard syntax:
```php
(Foo) $variable;
```
Backward Compatibility
***************************
This feature introduces new syntax and does not affect existing code. It is
fully backward-compatible, as it does not modify or deprecate any existing
functionality.