2
respostas

Como tipar uma função contendo dois tipos de retorno?

Olá Pessoal tudo bom?? Estava fazendo o curso e me deparei com o seguinte cenário, quando o assunto é tipagem de função.

<?php

$arrNum = [10, 20, 40, 50, 60];

function findNumber (int $numeroProcurado, array $listaNumerica)
{
    $posicao = array_search($numeroProcurado, $listaNumerica);

    if( $posicao == "" ) {
        return $listaNumerica;
    }

    return "Número encontrado na posição: ".$posicao;
}

$nov = findNumber( 90, $arrNum );

print_r($nov);

Gostaria de saber, qual é a forma correta de tipar essa função? ( já tentei colocar os dois array|string. Mas não deu muito certo. Se deixo sem ele funciona numa boa) Pois quando não encontro o valor na lista eu retorno o array mostrando os números. Já no cenário onde o número é encontrado eu retorno uma string com sua posição

Muito obrigado galera!!

2 respostas

Boa tarde Washington, tudo bem?

Você pode alterar o seu retorno da lista, para uma string, utilizando a função implode.

if( $posicao == "" ) {
        return implode(",\n",$listaNumerica);
}

O resultado ficaria assim

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, Washington. Essa é uma prática perigosa. O cenário ideal é sempre ter apenas UM tipo de retorno. Nesse seu cenário o ideal seria ter duas funções diferentes com os comportamentos diferentes.

Mas se em algum momento você realmente precisar escrever uma função com dois possíveis retornos: https://www.youtube.com/watch?v=RLaS6WDOzyc