[RFC] [Vote] Type Guards for Classes

From: Date: Thu, 16 May 2024 20:31:10 +0000
Subject: [RFC] [Vote] Type Guards for Classes
Groups: php.internals 
Request: Send a blank email to internals+get-123324@lists.php.net to get a copy of this message
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.

« previous php.internals (#123324) next »