You have a point, but for input in general non type-hinted functions
should be used. Your first example shows a scenario in which not to use
type hinting, because all $_REQUEST input is in string form. However
when dealing with internal functions and methods, type hinting can
prevent flawed interaction between multiple developer's code, as well as
enforce a consistent API.

On Thu, 2008-01-03 at 22:13 +0000, Amir Abiri wrote:
> The question that pops to my mind by reading this thread is "what's wrong 
> with the following code":
> 
> function add(int $a, int $b)
> {
>   return $a + $b;
> }
> 
> add($_REQUEST['a'], $_REQUEST['b']); // Assume $_REQUEST['a'] == '1' and 
> $_REQUEST['b'] == '2'.
> 
> And the truth is that if I was forced to explicitly cast I would be annoyed. 
> I can't say I see that
> cast as promoting better code or more readable code - It would just clutter 
> the code and be
> annoying. PHP does a lot of type juggling for me, why annoy me all of a 
> sudden? 
> 
> As for the argument of "it's optional" the problem with it is that most code 
> that the average PHP
> developer writes is constrained PHP that other PHP developers have already 
> written, either library
> or code base. The feature may be optional for the developer writing the 
> function or method, but it
> is enforced on the developer who's using it. This is exactly where the 
> "direction of the platform"
> arguments come into play.
> 
> So I'm thinking, "No".
> 
> But then I was thought about it further and thought about this scenario:
> 
> $a = some_functions(); // Let's say it returned NULL.
> $b = $_REQUEST['b'];   // Let's say this is ''.
> 
> add($a, $b);
> 
> 
> Very bad. Hell I'd like to have some easy way of telling off the developer 
> who tries to do that to
> my function. Enter type hints.
> 
> 
> Here are a few more examples:
> 
> concatenate(string $str1, string $str2)
> {
>   return $str1 . $str2;
> }
> 
> concatenate('x', 1);       // Great, what's the big deal ?
> concatenate(NULL, false);  // Hmm...
> concatenate($obj1, $obj2); // $obj1 and $obj2 have __toString().
> 
> 
> So the bottom line is that it seems to me that what would be really useful is 
> not strict type
> hinting, but more like "Juggling hinting". i.e differentiate between an "OK" 
> type juggle and a "bad"
> type juggle. Silently perform the first, while emit a small notice or warning 
> for the later.
> 
> Just my... erm, 2$... :-)
> 
> A
> 

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

Reply via email to