Hi Anthony, I understand your concerns and think the work we are doing should be suitable to compilers and static analyzers, but that's hard to make everyone happy.
One thing I thought we should reserve for a future release is the addition of a set of strict type hints : something like (just example syntax) 'int!', 'float!', 'string!', 'bool!' (other types are strict already). These types would have their counterpart at the ZPP level and their parsing rule would be to reject everything except the corresponding zval type. This way, the user can write : function convertToInt(string $number): int! { <- int! instead of int if (!preg_match("(^[0-9]{1,17}$)", $number)) { throw new InvalidArgumentException("Supplied argument is not a valid number"); } return $number; } Which makes it usable for static analysis, I guess. These would be primarily used for return types. Another valuable type would be something like 'numeric!', which could accept IS_LONG and IS_FLOAT only. This would be interesting for static analysis, to know that it cannot be a string, while accepting any zval numeric value. This is a little harder because it should be implemented as an alias of 'int!|float!', and we wanted to reserve union types for a future release. About using zval type *and* value, I don't like it too, and I would prefer using types only, but I see no way of keeping accepting "31" as int without depending of the runtime value. Additional strict types, as proposed above, may be a partial solution because those would never care about value. However, the more I think about it, the more I think that this set of strict types will be necessary to design union types, as defining a set of rules to convert a zval to a union of weak types, while possible, will be a mess. So, future union types could be strict-only, which will make them suitable for analysis. I'm afraid this is probably not what you expect but, as I previously said, I'm trying to satisfy as many people as possible. Maybe you're right and '0.3 or nothing' proponents are a 'crowd', but I am not doing politics. If this is the case, the 'crowd' will win and this will be perfect. Now, if you want to collaborate on the compromise we are trying to build, I really value your opinion. I don't pretend to be right in any way and I understand your pov but, if you stay on '0.3 or nothing', I cannot do much more. Regards François -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php