Несколько возвращаемых типов php 7

У меня есть некоторые методы, которые могут возвращать один из двух типов возврата – (я использую фреймворк с использованием MCV, поэтому рефакторинг этих нескольких функций, в частности, не привлекателен)

Можно ли объявить возвращаемый тип, возвращающий один или другой, и не выполнить что-либо еще?

function test(): ? { if ($this->condition === false) { return FailObject; } return SucceedObject; } 

На данный момент поддерживаемый способ состоит в том, чтобы два объекта могли совместно использовать интерфейс. Пример:

 interface ReturnInterface {} class FailObject implements ReturnInterface {} class SuccessObject implements ReturnInterface {} function test(): ReturnInterface {} 

В этом примере ReturnInterface пуст. Простое присутствие поддерживает декларацию требуемого типа.

Предупреждение :
Следующие обсуждаемые RFC (типы Союза) были отклонены
https://wiki.php.net/rfc/union_types

Существует активная, горячая дискуссия о типах профсоюзов с несколькими конкурирующими RFC. Если какая-либо из них пройдет, то предлагаемая подпись будет:

 function test(): FailObject|SuccessObject {} 

Тем не менее, я предпочитаю интерфейсный подход независимо от типов профсоюзов. Для меня это более понятно и более расширяемо. Если позже я хочу WarnObject мне просто нужно определить его как расширение ReturnInterface – вместо того, чтобы проходить через все подписи и обновлять их до FailObject|SuccessObject|WarnObject .

Как отметил епископ, существует RFC для добавления нескольких типов возврата. Тем не менее, я думал, что добавлю, что с PHP7.1 теперь вы можете указать тип возвращаемого значения типа:

 function exampleFunction(string $input) : ?int { // Do something } 

Таким образом, эта функция будет принимать строку и добавив вопросительный знак до того, как вы позволите ему вернуть нуль или целое число.

Вот ссылка на документацию: http://php.net/manual/en/functions.returning-values.php

И вот цитата из этой страницы, объясняющая использование: PHP 7.1 допускает типы void и null return, предшествующие объявлению типа с помощью? – (например, функция canReturnNullorString ():? String)

Кроме того, вот еще один поток, который относится к этому: Nullable возвращаемые типы в PHP7

PHP 7.2 теперь поддерживает тип возвращаемого объекта

http://php.net/manual/en/migration72.new-features.php

 function test(object $obj) : object // return any type of object ...