Re: Type hinting misunderstood
| From: | Sam Barrow | Date: | Sun, 06 Jan 2008 15:55:05 +0000 |
| Subject: | Re: Type hinting misunderstood | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-34530@lists.php.net to get a copy of this message | ||
On Sun, 2008-01-06 at 11:28 +0000, Alain Williams wrote:
> On Sat, Jan 05, 2008 at 07:34:04PM -0800, Mike Lively wrote:
>
> > input is going to makes it's way into your api at some point. Now of course you can
> > (and should) be filtering this
> > input before it is used, but if imo when dealing with a loosely typed language where the
> > same input could be hinted as an
> > int in one function it eventually reaches, and a string in another.
>
> > The point being I understand you may be targeting 'internal stuff' but
> > programming (especially web development) is
> > centered around manipulating/reading input to perform actions...just because it's not
> > 'intended' doesn't mean it's going
> > to never happen.
>
> > Also, I am pretty sure PDO returns results from at least mysql and sqlite as strings
> > regardless of their type in the
> > database...or are results from the database also not something type hints are inteded for?
>
> PLEASE READ CAREFULLY
>
> You have NOT understood what type hinting is about.
>
> You are confusing the TYPE and the VALUE.
>
> What type hinting means is:
>
> * is the TYPE correct ? If so succeed.
>
> * can the VALUE be 100% converted to the desired TYPE (eg '5' to int) ? If so
> succeed.
>
> * fail
>
> Type HINTING is not type ENFORCEMENT. PHP type juggling is still allowed, so PDO returning
> results as strings
> is quite OK as long as what is defined to be numeric *really* has a VALUE that is a number.
>
Actually this patch does do type enforcement. Once we start doing
conversions, we get into a gray area concerning the conversion rules.
As I said, this patch is not intended for stuff like $_GET, $_POST,
database data, etc. It is intended for internal functions to your
application.
function requireFile(string $file, bool $getOutput = false, array $args
= array())
{
$obLevel = ob_get_level() ;
ob_start() ;
$return = require_once($file) ;
if ($getOutput)
{
$return = ob_get_clean() ;
}
else
{
if ($_mod['base']['output']['strict'] and ob_get_length() > 0)
{
::error::go('Output generated in file "' . $file . '".') ;
}
ob_end_clean() ;
}
if ($obLevel !== ob_get_level())
{
::error::go('Output buffering level mismatch after inclusion of file
"' . $file . '".') ;
}
return $return ;
}
This function will not be called using input data.