FAQ
hi all,

we are encountering an error in our code due to type hint semantics. php is
allowing NULL values through a type hint for a class, however, if i read the
manual, NULL, should only be allowed, if and only if, null is given as the
default value for the formal parameter that is type-hinted.

"PHP 5 introduces Type Hinting. Functions are now able to force parameters
to be objects (by specifying the name of the class in the function
prototype) or arrays (since PHP 5.1). However, if
NULL<http://ch2.php.net/manual/en/language.types.null.php>is used as
the default parameter value, it will be allowed as an argument
for any later call."

now, i have checked our code; there is no NULL default value, and there are
no parents which mark a default value of NULL. so why would they be
creeping through then.. ?

well, i glanced at the phpt test, and its quite clear the tests are allowing
NULL,

Zend/tests/errmsg_013.phpt:errmsg: default value for parameters with array
type hint can only be an array or NULL
Zend/tests/errmsg_013.phpt:Fatal error: Default value for parameters with
array type hint can only be an array or NULL in %s on line %d

looking at the function prototype in this test, NULL is not specefied as the
default value, so i dont think NULL should be allowed here anyway..
--TEST--
errmsg: default value for parameters with array type hint can only be an
array or NULL
--FILE--
<?php

class test {
function foo(array $a = "s") {
}
}

echo "Done\n";
?>
--EXPECTF--
Fatal error: Default value for parameters with array type hint can only be
an array or NULL in %s on line %d

this taken from 5.2.6.RC3 source. it seems to me, either the source or the
manual is wrong, but which one is it ?? personally, i would prefer it be
the former in this case ;)

FWIW, we are currently running php5.2.2 on centos5, but im pretty sure an
upgrade to 5.2.6 will not change the semantics, since the phpt tests were
the same in both the 5.2.2 & 5.2.6 source.

-nathan

Search Discussions

  • Lukas Kahwe Smith at Oct 16, 2008 at 6:12 pm

    On 07.10.2008, at 21:59, Nathan Nobbe wrote:

    hi all,

    we are encountering an error in our code due to type hint
    semantics. php is
    allowing NULL values through a type hint for a class, however, if i
    read the
    manual, NULL, should only be allowed, if and only if, null is given
    as the
    default value for the formal parameter that is type-hinted.

    "PHP 5 introduces Type Hinting. Functions are now able to force
    parameters
    to be objects (by specifying the name of the class in the function
    prototype) or arrays (since PHP 5.1). However, if
    NULL<http://ch2.php.net/manual/en/language.types.null.php>is used as
    the default parameter value, it will be allowed as an argument
    for any later call."

    now, i have checked our code; there is no NULL default value, and
    there are
    no parents which mark a default value of NULL. so why would they be
    creeping through then.. ?

    well, i glanced at the phpt test, and its quite clear the tests are
    allowing
    NULL,

    Zend/tests/errmsg_013.phpt:errmsg: default value for parameters with
    array
    type hint can only be an array or NULL
    Zend/tests/errmsg_013.phpt:Fatal error: Default value for parameters
    with
    array type hint can only be an array or NULL in %s on line %d

    looking at the function prototype in this test, NULL is not
    specefied as the
    default value, so i dont think NULL should be allowed here anyway..
    --TEST--
    errmsg: default value for parameters with array type hint can only
    be an
    array or NULL
    --FILE--
    <?php

    class test {
    function foo(array $a = "s") {
    }
    }

    echo "Done\n";
    ?>
    --EXPECTF--
    Fatal error: Default value for parameters with array type hint can
    only be
    an array or NULL in %s on line %d

    this taken from 5.2.6.RC3 source. it seems to me, either the source
    or the
    manual is wrong, but which one is it ?? personally, i would prefer
    it be
    the former in this case ;)

    FWIW, we are currently running php5.2.2 on centos5, but im pretty
    sure an
    upgrade to 5.2.6 will not change the semantics, since the phpt tests
    were
    the same in both the 5.2.2 & 5.2.6 source.

    please file a bug report with a reproduceble test case that
    illustrates the conflicting behavior with the manual.

    regards,
    Lukas Kahwe Smith
    mls@pooteeweet.org

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-internals @
categoriesphp
postedOct 7, '08 at 7:59p
activeOct 16, '08 at 6:12p
posts2
users2
websitephp.net

2 users in discussion

Nathan Nobbe: 1 post Lukas Kahwe Smith: 1 post

People

Translate

site design / logo © 2022 Grokbase