On Tue, 2008-01-08 at 09:41 +0000, Richard Quadling wrote:
> On 07/01/2008, Stefan Priebsch <[EMAIL PROTECTED]> wrote:
> > Robert Cummings schrieb:
> > > The onus should be on consumers of my API to use it properly, not on me
> > > to jump through hoops to make sure they gave me the correct data at
> > > every step of the way. I stopped holding hands in grade 3 or so.
> >
> > Still you force any defensive coder to repeat explicit type checks and
> > type casts all over whenever one of your API functions is called.
> >
> > Regards,
> >
> > Stefan
> >
> 
> This argument implies that the coder constantly shifts type on their 
> variables.
> 
> If I have a counter, I'll use an integer. I'll initialise it to 0. I
> __CAN__ use a string of "0", but as soon as I say +1 it is juggled an
> integer until some other use juggles it to something else.
> 
> The only time I see auto type juggling useful (for internal data not
> user input) is in string concatenation and then it fails for boolean
> types (""/"1" rather than "0"/"1" or even better "true"/"false"). But
> then, it is only the result of the juggle that is used. The original
> variable isn't juggled.
> 
> Type juggling is a great thing, but next to useless if you are a
> "defensive coder".
> 
> You know that converting from type a to type b MAY result in data loss
> ("1 defensive coder" + 1 = 2, not "2 defensive coder", so you rarely
> do it. Instead you will use functions to absolutely confirm the
> conversion and check values.

That's part of the reason I did this in the first place, to prevent
errors like this that cause data loss.

> That's defensive.
> 
> 
> From what I can tell this is what is being asked for.
> 
> 1 - Scalar type hints act as type jugglers at the interface of the
> function/method rather than having type checking code in the
> function/method.
> 
> You will still need to have value checks if they are appropriate.
> 
> So, function x(string $s, int $i) will get a string and an integer, no
> matter what is sent.
> 
> Thinking about this, simply because we all know PHP __CAN__ type
> juggle, there is no need for any errors/warnings/notices on scalar
> types. It will be up to the API developer to make sure appropriate
> values are supplied (if necessary), so this reduces the type checking.
> 
> 
> Richard.
> 
> 

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to