Re: [RFC] Scalar Type Hinting With Casts (re-opening)
| From: | Theodore Brown | Date: | Fri, 18 Jul 2014 05:02:37 +0000 |
| Subject: | Re: [RFC] Scalar Type Hinting With Casts (re-opening) | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-75683@lists.php.net to get a copy of this message | ||
> Since I am very much in favour of scalar type hints, I've updated the
> patch to master and made some minor improvements, and I am re-opening
> the RFC with the intent to try and get it into PHP 5.7.
First of all, this is my first reply on PHP Internals so I hope I am doing it right. :)
Thank you very much Andrea for reviving this RFC - I'm really looking forward to using
something like this in the next version of PHP to more easily define interfaces and
catch unintended errors in my code.
However, something I feel it is important to consider is not just how scalar type
annotations fit into the history of PHP, but how they fit with the way type annotations
are currently used and where the language is going in the future.
A recurring comment I've heard in the discussion for this RFC is that strict type hints
aren't "the PHP way." However, current type hints for classes, arrays, and
callables
work exactly in this way - they do not allow nulls, no casting is performed, and an
invalid type results in a fatal error. If scalar annotations are introduced, many PHP
developers (myself included) would naturally expect them to behave in the same way.
Another concern I have is in regard to the future. I'm looking forward to the
possibility of specifying nullable types in a future version of PHP (see Levi Morrison's
"Declaring Nullable Types" RFC: http://wiki.php.net/rfc/nullable_typehints).
If the
nullable types RFC is accepted, it would be highly disconcerting if scalar type
annotations allowed null values regardless of whether a nullable marker is specified.
I don't think that optional strict type annotations will take away from PHP's dynamic
nature - they will instead be a valuable feature used in places where it is necessary
to strictly validate a parameter's type - this is especially important to ensuring
stability and accuracy in the large PHP applications it is my job to maintain.
The RFC has already been updated to make boolean type annotations strict. Doesn't it
make sense to treat the other scalar types in the same way? Perhaps a future RFC could
propose a second (also optional) syntax to specify type annotations which perform casts.
However, only having cast-based annotations for scalar types would be a mistake, IMHO.
--
Theodore Brown
A PHP developer interested in the language's future