In a word, yes. Have to say you're abilities to compile Zeev -> formal declaration are pretty amazing :)
Zeev > On 17 בפבר׳ 2015, at 08:20, Sara Golemon <poll...@php.net> wrote: > >> On Mon, Feb 16, 2015 at 10:04 PM, Zeev Suraski <z...@zend.com> wrote: >> That syntax poll aside, I had what I hope is some sort an enlightenment, and >> I think I know what will get me to cast my vote in favor of 'strict', as a >> true supporter. There's one very special conversion that's too common in >> PHP to dismiss (IMHO), and is also completely harmless in 99.999% of the >> cases, if not strictly 100%: >> >> string->int or string->float conversions, when the string looks *exactly* >> like a number. Given almost all of our inputs (from databases, forms, >> files, etc.) come in string form, that's by far the conversion that's going >> to give us the most trouble - and is most probably the use case that by far >> is going to result the largest amount of explicit casts to work around that >> problem. >> >> What if strict mode didn't just blindly check zval.type, but actually >> allowed for this one type of conversion to go through without a problem? >> >> No bool to int. No Apple to int. No "123 testing" to float. Just "32" to >> 32 and "37.7" to 37.7. >> >> Can the strict supporting camp consider that option? Judging by the >> examples brought up by proponents of v0.3, this type of conversion isn't >> their issue. It's the 'obviously wrong' conversions that bug them. >> >> As a secondary concern I'd put int to float conversions where no >> (meaningful) data is being lost, e.g. 37 -> 37.0, even though a tiny bit of >> accuracy is lost. Rejecting this particular conversion places us at being >> stricter than mostly all other languages. That said, it's a much less >> common conversion so I don't feel nearly as strongly about it as the string >> one. >> >> Last, regarding internal functions, I do agree with Rasmus and Drew. Again, >> judging by the examples brought up as a part of the discussion, it seems as >> if we gave ZPP developers a standard easy way of being a lot more picky >> about the types of values of particular arguments, and allowing them to do >> this selectively for those places that are very sensitive (e.g. >> curl_setopt()) would be a more suitable solution than just turning strict >> validation for all internal functions, which were built with very very >> different assumptions in mind. The biggest difference between internal >> functions and userland functions in the context of this RFC is that with >> userland functions, we're starting with a clean slate. There are no type >> hint definitions anywhere, developers can selectively add them as they see >> fit. With internal functions, we have type requirements EVERYWHERE already, >> but with semantics that didn't take strict typing into account at all and >> evolved for almost 20 years. Strict typing the way it is now would >> radically change these semantics overnight, and will make the adoption of >> strict a much bigger headache than it can be, as I believe Rasmus >> demonstrated. >> >> I think addressing these issues could get us a LOT closer to consensus and >> make a lot of those who voted 'no' on v0.3 vote yes on v0.4. > So, if you'll permit me to summarize your message. The following > would be palatable to you? > > * Lossless coercion. This would sit somewhere between strict types > and weak types as lossy conversions (object->__toString() for objects > passed where string expected, any->bool) would be disallowed, but > lossless conversions (numeric strings to number types, int to float, > whole floats to ints, numbers to strings -- But no implicit > conversions to bools, no non-numeric strings to numerics, etc...) > > * Exclude internal functions from the strict switch. (Perhaps have a > separate switch for internal functions at a later date) > > With option to introduce features such as the following at a later date: > > * Union types (e.g. function foo((int | float) $value): (bool | string) { ... > }) > * Typedefs (e.g. TypeDef (int|float) numeric; -- Some defined as > standard (like numeric), others user-definable) > > -Sara -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php