As of PHP 8+, you may use union types:
function test[]: FailObject|SuccessObject {}
Another way, available in all versions since PHP 4, is for the two objects to share an interface. Example:
interface ReturnInterface {}
class FailObject implements ReturnInterface {}
class SuccessObject implements ReturnInterface {}
function test[]: ReturnInterface {}
In this example, ReturnInterface
is empty. Its mere presence supports the needed return type declaration.
You could also use a base, possibly abstract, class.
To me, for this use case, interfaces are more
clear and more extensible than union types. For example, if I later want a WarnObject
I need only to define it as extending ReturnInterface
-- rather than going through all signatures and updating them to FailObject|SuccessObject|WarnObject
.
Values are returned by using the optional return statement. Any type may be returned, including arrays and objects. This causes the function to end its execution immediately and pass control back to the line from which it was called. See return for more information.
Note:
If the return is omitted the value
null
will be returned.
Use of return
Example #1 Use of return
A function can not return multiple values, but similar results can be obtained by returning an array.
Example #2 Returning an array to get multiple values
To return a reference from a function, use the reference operator & in both the function declaration and when assigning the returned value to a variable:
Example #3 Returning a reference from a function
For more information on references, please check out References Explained.
ryan dot jentzsch at gmail dot com ¶
5 years ago
PHP 7.1 allows for void and null return types by preceding the type declaration with a ? -- [e.g. function canReturnNullorString[]: ?string]
However resource is not allowed as a return type:
Errors with:
Fatal error: Uncaught TypeError: Return value of fileOpen[] must be an instance of resource, resource returned.
rstaveley at seseit dot com ¶
12 years ago
Developers with a C background may expect pass by reference semantics for arrays. It may be surprising that pass by value is used for arrays just like scalars. Objects are implicitly passed by reference.
Only myfunc5[] returns 'thingy' - the rest return 1.
nick at itomic.com ¶
19 years ago
Functions which return references, may return a NULL value. This is inconsistent with the fact that function parameters passed by reference can't be passed as NULL [or in fact anything which isnt a variable].
i.e.
parses fine and echoes NULL
k-gun !! mail ¶
5 years ago
With 7.1, these are possible yet;
Berniev ¶
4 years ago
Be careful when introducing return types to your code.
Only one return type can be specified [but prefacing with ? allows null].
Return values of a type different to that specified are silently converted with sometimes perplexing results. These can be tedious to find and will need rewriting, along with calling code.
Declare strict types using "declare[strict_types=1];" and an error will be generated, saving much head-scratching.
ryan dot jentzsch at gmail dot com ¶
7 years ago
PHP 7 return types if specified can not return a null.
For example:
php[@]genjo[DOT]fr ¶
2 years ago
Declaring a collection of objects as return type is not implemented and forbidden:
We have to use:
Idem for function parameter:
Vidmantas Maskoliunas ¶
6 years ago
Note: the function does not have "alternative syntax" as if/endif, while/endwhile, and colon [:] here is used to define returning type and not to mark where the block statement begins.