테스트 사이트 - 개발 중인 베타 버전입니다

PHP 7.1 함수 리턴 타입이 다를 때 채택완료

gilynh 8년 전 조회 5,140

</span> </p><p><span style="font-size: 11pt;">// $db는 PDO 입니다</span></p><p>function sql_query($sql, $link = null): ?PDOStatement</p><p>{</p><p>    global $db;</p><p> </p><p>    if ($link === null) {</p><p>        $link = $db;</p><p>    }</p><p> </p><p>    $sql = trim($sql);</p><p>    $sql = preg_replace('#^select.*from.*[\s\(]+union[\s\)]+.*#i ', 'select 1', $sql);</p><p>    $sql = preg_replace('#^select.*from.*where.*`?information_schema`?.*#i',</p><p>    'select 1', $sql);</p><p> </p><p>    try {</p><p>        $rst = $link->query($sql);</p><p>    } catch (PDOException $ex) {</p><p>        return $ex;</p><p>    }</p><p> </p><p>    return $rst;</p><p>}</p><p>

 

위와 같은 sql_query 함수인데 리턴 값이 평소에는 PDOStatement 입니다만,

예외 상황이 발생하면 PDOException 형태로 타입이 변환이 되는데요.

리턴 타입을 어떻게 하면 둘 다 에러없이 정상적으로 리턴이 될까요?

리턴 타입을 정하지 않으면 되긴 합니다만 멀티로 하는 방식이 혹시 있을까 궁금해서 물어봅니다.

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
현재는 union return types 가 안되는듯 하네요.<br />
굳이 하시려면 리턴 하고자 하는 타입들을 멤버변수로 갖는 다른 클레스를 만들어 놓고, 그 인스턴스를 반환하는식으로 해야하지 싶습니다.
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

g
gilynh
8년 전
https://wiki.php.net/rfc/union_types#return_type_example
이런 방식은 거부된 것으로 나오는데 그럼 언젠가는 다시 논의 될 내용인건가요?

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인