PHP: bool vs boolean type hinting

37,460

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

Warning
Aliases for the above scalar types are not supported. Instead, they are treated as class or interface names. For example, using boolean as a parameter or return type will require an argument or return value that is an instanceof the class or interface boolean, rather than of type bool:

<?php
function test(boolean $param) {}
test(true);
?>

The above example will output:

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given

So in a nutshell, boolean is an alias for bool, and aliases don't work in type hints.
Use the "real" name: bool


There are no similarity between Type Hinting and Type Casting.

Type hinting is something like that you are telling your function which type should be accepted.

Type casting is to "switching" between types.

The casts allowed are:

(int), (integer) - cast to integer
(bool), (boolean) - cast to boolean
(float), (double), (real) - cast to float
(string) - cast to string
(array) - cast to array
(object) - cast to object
(unset) - cast to NULL (PHP 5)

In php type casting both (bool) and (boolean) are the same.

Share:
37,460
Jimmy P
Author by

Jimmy P

Two words: no... nonsense. Okay, maybe a little nonsense. Actually, let's just call it 50/50 on the nonsense to no nonsense ratio. I fell in love with coding during my earliest days of University. I had some phenomenal professors that were very passionate about the trade and I'd like to say that their positivity and insight resonated with me in the best way possible. Since then there have been very few boring days for me, because each problem solved or product built is a unique opportunity to re-examine and reapply the lessons I learned years ago.

Updated on May 17, 2020

Comments

  • Jimmy P
    Jimmy P about 4 years

    I've been trying to use type hinting more in PHP. Today I was writing a function that takes a boolean with a default parameter and I noticed that a function of the form

    function foo(boolean $bar = false) {
        var_dump($bar);
    }
    

    actually throws a fatal error:

    Default value for parameters with a class type hint can only be NULL

    While a function of the similar form

    function foo(bool $bar = false) {
        var_dump($bar);
    }
    

    does not. However, both

    var_dump((bool) $bar);
    var_dump((boolean) $bar);
    

    give the exact same output

    :boolean false

    Why is this? Is this similar to the wrapper classes in Java?

  • okdewit
    okdewit over 6 years
    no similarity between Type Hinting and Type Casting -- A scalar type hint, both parameter and return type, does perform typecasting though. In other words: (function():bool { return 1; })() === true