

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
18 messages in net.php.lists.internalsRe: [PHP-DEV] [PATCH] Scalar type hin...| From | Sent On | Attachments |
|---|---|---|
| Hannes Magnusson | Nov 3, 2006 10:00 am | .txt |
| Pierre | Nov 3, 2006 10:39 am | |
| Marcus Boerger | Nov 3, 2006 10:46 am | |
| Ron Korving | Nov 3, 2006 10:48 am | |
| Ilia Alshanetsky | Nov 3, 2006 11:06 am | |
| Pierre | Nov 3, 2006 11:12 am | |
| Zeev Suraski | Nov 3, 2006 12:34 pm | |
| Brian Moon | Nov 3, 2006 2:45 pm | |
| Richard Lynch | Nov 6, 2006 12:18 pm | |
| Markus Fischer | Nov 6, 2006 11:00 pm | |
| Richard Quadling | Nov 7, 2006 1:26 am | |
| Ron Korving | Nov 7, 2006 2:19 am | |
| Richard Quadling | Nov 7, 2006 2:39 am | |
| Christian Schneider | Nov 7, 2006 6:45 am | |
| Richard Quadling | Nov 7, 2006 7:33 am | |
| Richard Lynch | Nov 7, 2006 10:45 am | |
| Richard Quadling | Nov 8, 2006 1:37 am | |
| Derick Rethans | Nov 15, 2006 12:19 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [PHP-DEV] [PATCH] Scalar type hinting ;) | Actions... |
|---|---|---|
| From: | Richard Quadling (rqua...@googlemail.com) | |
| Date: | Nov 8, 2006 1:37:07 am | |
| List: | net.php.lists.internals | |
My suggestion was to introduce type hinting gradually. First of all type hints, would be just that, hints. A suggestion as to the recommended type. If hints are used and the types do not agree, then this is an E_NOTICE. If you are using hints then you are expecting the types to be right. If you don't use hints, then nothing extra. The notice would be present simply because it is an advisary notice. Nothing is enforced. No type conversion would take place, but it would mean you could see which methods/functions are getting values which may need converting. Maybe this could be E_STRICT. By using hints, you are implying strict coding. I could go with that.
The next stage could be to allow automatic conversion based upon the normal type juggling rules OR to use a type conversion table which would use the same PHP functions that would be used in userland to do the conversion manually. In some cases this is just casting, but in other cases the conversion of 'december' to a number (for example) should result in NULL. I do agree (having re-read my own post) that a failed conversion is an E_ERROR (or E_STRICT again). Again, if you are using type hinting and are using automatic conversion, you have to obey the rules. It may be that you could supply your own conversion rules. A potentially useful feature would be to allow for a user defined automatic type conversion table. So, a user could effectively wrap the parameters to their own type and use their own type conversion logic. This does allow for the creation of user defined types (which I suppose are classes ... )
The final stage would be to apply a strict mode and that type hinting is actually type enforcement. If a function or a method says it ways an int, it must have an int. If not, then then this is a fatal error. No automatic conversion.
If this is combined with filtering, I think you should actually have a fewer type conversions. You get the data as a string from a user form. You know that the 3 columns representing a DOB are actually numeric. You use a filter to force them to numeric types. From that point on, why do you need to know that they are strings? You pass the values around as integers. If you pass them to a mktimt() function, they are in the correct type already. This SHOULD mean less type conversions.
WIBNI - a very old acronym for Wouldn't It Be Nice If. MH - the opposite to a WIBNI, a Must Have.
The introduction of type hints for scalars is under discussion. I'm strongly in favour of them. It may be that I don't need them once I start using the standard input filtering (I use my a mechanism described by Marco Tabini in php|Architect - Poka-Yoke).
I think this comes down to a set of choices.
You can do everything yourself. No hints, no automatic filtering, etc.
You can restrict what you want to do. Using enforced typing, using automatic filtering, etc.
I've come from an environment where each method/function is defined by the interface and the types. If I supply the wrong type the code wouldn't compile or worse. If PHP uses type hinting/enforcement, then for all the CURRENT PHP code out there, nothing would change.
Of course all of this can be avoided if you didn't use scalars but had all variables as objects (Eek! It would work - I think - but eek).
On 07/11/06, Richard Lynch <ce...@l-i-e.com> wrote:
On Tue, November 7, 2006 4:19 am, Ron Korving wrote:
I wouldn't like E_NOTICE. I agree that the result should be a NULL value if a conversion fails,
Assume, for the sake of argument, that someday one's type-hint could be:
function foo ([NULL | int] $bar){ }
Also assume the paramter passed to $bar is '42'
Then is converting to NULL really the right answer?...
I don't have a BETTER answer, mind you...
Seems to me, though, that if you're willing to turn on type-hinting, and you restrict your function to accept only [NULL | int], then I'd be more happy with PHP throwing something bigger than E_NOTICE and converting the input to NULL and carrying on...
Seems to me, that once you commit to the type-hinting, a failed conversion oughta be E_ERROR...
I don't see a point in a hint called "mixed" either. You might as well not use a hint for that particular function parameter.
You may need [mixed] if the PHP Manual under-documents what return values occur in the case of errors (which is the current state-of-the-art, really) and you don't know for sure what is going to come back, but you want something there, just so you know it's "not right yet"
Sometime after that the facility to make the hints become enforcers. There would be a published list of conversion mechanisms (the equivalent PHP function in effect). You could potentially allow user defined conversions for user defined types though I would see this as a WIBNI, rather than a MH.
WIBNI? MH? [shrug]
I get the gist from context, but may be missing details... :-)
-- Some people have a "gift" link here. Know what I want? I want you to buy a CD from some starving artist. http://cdbaby.com/browse/from/lynch Yeah, I get a buck. So?
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
-- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!"








.txt