A partire da ora, il modo supportato è che i due oggetti condividano un'interfaccia. Esempio:
interface ReturnInterface {}
class FailObject implements ReturnInterface {}
class SuccessObject implements ReturnInterface {}
function test(): ReturnInterface {}
In questo esempio, ReturnInterface
è vuoto. È semplice la presenza che supporta la dichiarazione del tipo di reso necessaria.
Attenzione:
Il seguente RFC discusso (tipo Union) è stata rifiutata
https://wiki.php.net/rfc/union_types
V'è attiva, la discussione a caldo sui tipi di unione con diversi RFC competizione. Se uno di questi passano, poi una firma proposta sarebbe:
function test(): FailObject|SuccessObject {}
Detto questo, preferisco l'approccio dell'interfaccia indipendentemente dal tipo di unione. Per me, è più chiaro e più estendibile. Se in seguito desidero uno WarnObject
, ho solo bisogno di definirlo come estendente ReturnInterface
- piuttosto che passare attraverso tutte le firme e aggiornarle a FailObject|SuccessObject|WarnObject
.
se entrambi 'FailObject' e' SucceedObject' condividono entrambi un'interfaccia o si estendono da un genitore comune –