Re: Type hinting
| From: | Zeev Suraski | Date: | Sat, 22 May 2010 16:50:28 +0000 |
| Subject: | Re: Type hinting | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-48394@lists.php.net to get a copy of this message | ||
At 19:30 22/05/2010, Josh Davis wrote:
On 22 May 2010 17:04, Zeev Suraski <zeev@zend.com> wrote: As one of the key people who designed PHP's type system I consider strict type checks completely alien to and counterintuitive in PHP and am therefore pushing to implement 'weak' typing instead, in a way that's consistent and familiar to users. I would normally refrain from posting on the dev list but as a "user" I feel the need to make sure that my position isn't misrepresented, so here it is.I think that users' opinion about language direction is very important, so thanks for writing.
As you wrote, you worked on PHP's _type system_ which is dynamic, really cool, juggles strings with ints and what not. However, the topic here is the _type hinting system_.Well I actually wrote PHP's type hinting system too :) And it's no coincidence there are no type hints for scalars, and that stems directly from PHP's type system. As a part of introducing type hints to PHP back in 2003, there was a discussion about whether or not to add scalar type hints. Consensus was against it, and actually as a part of the agreement to add type hints to PHP - we agreed we'll 'never' introduce scalar type hints because of the baggage and inconsistency it comes with. Never is not a very long time when it comes to software though...
As far as I know, there's no "weak" type hinting; if a method signature hints for an array and is given an integer, it throws a catchable fatal error. Therefore, as a user, what I am familiar to is a strict _type hinting system_. Anything else would feel inconsistent to me.That's true, but then, there's also no way to auto-convert class Foo to class Bar - while there is a way to auto-convert between scalar types in many (if not most) cases. Consider a simple example - class Child extends Parent {} strict type hinting is the equivalent of not allowing an object of class Child when a function expects an object of class Parent. Much like Child is_a Parent, "123" is_a int. Zeev