DEV Community

Eelco Verbrugge
Eelco Verbrugge

Posted on

PHP Type Hinting

Type hinting are type declarations to function arguments, return values and class properties. PHP ensures the value is of the same type you declared or throws an TypeError. It isn't required but very useful to catch mistakes and helpful to others reading your code to understand what is up.

Function arguments

To type hint our function argument message of our method error, we would add string just in front of our argument:

<?php

class Logger

{

    private $message;



    function alert(string $message)

    {

        return $this->message;

    }

}

$logger = new Logger;

$logger->alert('Wrong password');
Enter fullscreen mode Exit fullscreen mode

This makes sure that whatever is passed to our method, $message is always a type of string or an error is thrown.

Return values

This also works for our response. In this case we expect our method would return a string and so we add : string after our argument:

<?php

class Logger

{

    private $message;



    function alert($message): string

    {

        return $this->message;

    }

}

$logger = new Logger;

$logger->alert('Wrong password');

Enter fullscreen mode Exit fullscreen mode

Whatever we would pass to our error method as arguments (string, integer, boolean, array etc.), our return should always be a type of string otherwise an error is thrown.

Class properties

Besides methods we could also type hint our properties. In case of our message we add the annotation @var string:

class Logger

{

    /**

     * @var string

     */

    private $message;



    function alert($message)

    {

        return $this->message;

    }

}

$logger = new Logger;

$logger->alert('Wrong password');
Enter fullscreen mode Exit fullscreen mode

This makes sure that whenever we call this property it should be a type of string or an error is thrown.

All type hints together

If we would save logging messages in our database and we would like to create getters and setters for our message, we could use all 3 types of type hinting as followed:

class Logger

{

    /**

     * @var string

     */

    private $message;



    function setMessage(string $message): void

    {

        $this->message = $message;

    }



    function getMessage(): string

    {

        return $this->message;

    }

}
Enter fullscreen mode Exit fullscreen mode

I have type hinted the property $message, the argument as string and added the expected result of a string for the getMessage() method. For the setMessage method I added the expected result void. This means we do not expect anything for this method, this is because the setter would only set our property and doesn't return us anything.

Type hinting methods

Some would also type hint their methods, similar to our property, but this isn't necessary because we already type hinted our property, argument and response.

Let me know what you think and share your knowledge on Type Hinting!

Discussion (0)