[php] PHP7의 널 입력 가능 리턴 유형

PHP 7은 리턴 타입 선언을 소개 합니다. 즉, 함수 매개 변수에서 가능한 것처럼 반환 값이 특정 클래스, 인터페이스, 배열, 호출 가능 또는 새로 힌트 가능한 스칼라 유형 중 하나임을 나타낼 수 있습니다.

function returnHello(): string {
    return 'hello';
}

값이 항상 존재하지는 않으며 어떤 유형의 무언가 또는 널을 리턴 할 수도 있습니다. 기본값을 null ( DateTime $time = null) 로 설정하여 매개 변수를 널 입력 가능하게 만들 수 있지만 리턴 유형에 대해서는이를 수행 할 수있는 방법이 없습니다. 실제로 그런 경우입니까, 아니면 어떻게해야합니까? 이들은 작동하지 않습니다 :

function returnHello(): string? {
    return 'hello';
}

function returnHello(): string|null {
    return 'hello';
}



답변

PHP 7.1은 이제 nullable 반환 형식을 지원합니다 . 내가 연결 한 첫 번째 RFC는 다음과 같습니다.

function nullOrString(int $foo) : ?string
{
    return $foo%2 ? "odd" : null;
}

오래된 답변 :

내 의견은 실제로 질문에 대한 답변이기 때문에 :

PHP 7은 아직 널 입력 가능 리턴 유형을 지원하지 않지만이 를 해결하기 위한 RFC 가 있으며, 이는 PHP 7.1에 착륙하는 것을 목표로합니다. 전달되면 구문은 모든 타입 힌트 (반환 타입과 타입 힌트)에 영향을 미칩니다.

public function returnStringOrNull(?array $optionalArray) : ?string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

또한 유니온 유형을 추가하기 위해 경쟁 RFC 가 있으며, 동일한 유형을 수행 할 수 있지만 다르게 보일 수 있습니다.

public function returnStringOrNull(array|null $optionalArray) : string|null
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

그러나 지금은 다음과 같이 작성해야합니다.

public function returnStringOrNull( array $optionalArray = null)
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
}

또는 반환 유형과 일치하도록 빈 문자열을 반환하고 잘못된 값을 확인하십시오.

public function returnStringOrNull( array $optionalArray = null) : string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
    return '';
}
//call
$string = $x->returnStringOrNull();
if (!$string) {
    $string = $x->returnStringOrNull(range(1, 10));
}


답변

널 입력 가능 유형 은 PHP 7.1에서 사용 가능합니다.

다음은 구문 예입니다.

public function getName(): ?string
{
    return $this->name; // name can be null
}

PHP 7.1은 이제 GA이며 PHP 7.0에서 업그레이드 할 수 있습니다 (이전 버전과 호환되지 않는 변경 사항 은 거의 없습니다 )


답변

모든 유형에서 작동합니다.
예:

public function getOpportunity(): ?Opportunity
{
    return $this->opportunity;
}


답변