2014-09-20 5 views
-1

PHP에서 자바/C# 스타일 체크 캐스트를 가장 잘 모방하는 방법은 무엇입니까 (예 : (X)y)? 즉, yX이거나 하위 클래스 인 경우 아무 것도 수행되지 않는다는 의미가 있어야하지만 그렇지 않은 경우 예외가 throw되어야합니다. 내가 생각할 수있는체크 된 캐스트에 해당하는 PHP를 만드는 방법

가장 빠른 방법은

if(!(x instanceof Y)) throw new CastException(); 

이보다 빨리 또는 더 나은 방법이 있나요 instanceof를 사용? 표현식으로 캐스트를 사용할 수있는 방법이 있습니까 (예제에서 문장이 필요합니다). 그래서 다른 표현식에서 사용할 수 있습니까?

+1

PHP는 임의의 물건으로 형변환을 허용하지 않으므로 나는 그 질문이 무엇인지 확실하지 않습니다. – PeeHaa

+0

@PeeHaa : 물론 그것을 허용하지 않습니다. 그렇지 않으면 내 질문에 대한 대답은 단순히 "제공된 캐스트 연산자 사용"입니다. 그것은 그것을 허용하지 않기 때문에, 나는 그러한 검사 된 캐스트 연산자와 동일한 의미를 갖는 표현식을 작성하는 방법을 요구하고있다. – gexicide

답변

1

전달 된 매개 변수에 대해 PHP 유형 검사를 활용하여 자동으로 수행 할 수 있습니다. 당신이 제어 할 수있는, 그러나이 악화 단지 자신을 instanceof를 쓰기 체크하고 예외를 던지는 것보다 더 좋은하지 않고, 사실상

Catchable fatal error: Argument 1 passed to isAFoo() must be an instance of foo, instance of stdClass given,

:

class foo { 
} 

function isAFoo(foo $foo) { 
    return $foo; 
} 

$obj = new stdClass(); 

isAFoo($obj); 

오류를 트리거합니다 예외 유형.

+0

흥미로운 아이디어. 매개 변수 목록에서 형식 주석에 대해 알지 못했습니다. – gexicide