Re: Type hinting

From: 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

« previous php.internals (#48394) next »