php7 void return type not working?

I have a problem with return types in php7, specially “void”.

it works with all other types, int, string, null, bool, class objects.

but when i use void it expecting me to return an instance of object void but in reality it should not expect any return as thats what void is for.

note: I’m running PHP 7.0.3

here is the code:

   public static function setResponseCode(int $code) : void
    {
        http_response_code($code);

    }

and error message is:

Uncaught TypeError: Return value of CodeBase\HttpRequester::setResponseCode() must be an instance of void, none returned in /var/www/html/src/HttpRequester.php:86 Stack trace: #0 /var/www/html/index.php(103): CodeBase\HttpRequester::setResponseCode(500) #1 {main} thrown in /var/www/html/src/HttpRequester.php on line 86

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

Void return types are for PHP 7.1 (which had not yet been released when you asked this). From the RFC

Version: 0.2.1
Date: 2015-02-14 (v0.1, later withdrawn), 2015-10-14 (v0.2, revival)
Author: Andrea Faulds, [email protected]
Status: Implemented (PHP 7.1)

Solution 2

I’ve just found the answer here: https://wiki.php.net/rfc/void_return_type

It will be a feature in PHP 7.1

Solution 3

No there is not, until PHP 7.1. For PHP 7.0, you have to omit the return type completely for void functions/methods.

function printLn($a) {
    echo "$a\n";
}

Unfortunately, you then have no type safety for this function/method, and no TypeError will be thrown if you start returning something from it.

Luckily, PHP 7.1 fixes this:

Support for a new void return type is added. It requires that a function not return any value.

This is the correct syntax for PHP 7.1:

function should_return_nothing(): void {
    return 1; // Fatal error: A void function must not return a value
}

This was postponed during the proposal that created return type hints:

We keep the current type options. Past proposals have suggested new types such as void, int, string or scalar; this RFC does not include any new types. Note that it does allow self and parent to be used as return types.

Future Work

Ideas for future work which are out of the scope of this RFC include:

  • Allow functions to declare that they do not return anything at all (void in Java and C)

NULL also is not allowed as a return type.

Solution 4

tl;dr

Return type void works since PHP 7.1 which is already available.

Working syntax is:

<?php
function procedure(): void
{
//  return 'will not work';
}

echo procedure();

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply