문제

최근 업데이트 PHP,그들은 추가된 다양한 인터페이스에서 허용하는 개체를 취급 배열로,같은 ArrayAccess,반복기,셀,etc.

나의 질문은 것,그것은 다 의미는 다음과 같은 작업해야 합:

function useArray(array $array)
{
    print_r($array);
}

useArray(new ArrayObj(array(1,2,3,4,5));

바로 지금,PHP 가 발생 입력-암시 오류,로 $array 기술적으로 훌륭한 기능들을 가지고 있습니다.그러나,그것을 구현하는 모든 인터페이스는 기본적으로 동일하다 배열입니다.

echo $array[0]; // 1
$array[0] = 2;
echo $array[0]; // 2

논리적으로,개체할 수 있어야 하는 곳에 사용되는 배열을 사용할 수 있습니다,그것이 동일한 인터페이스를 구현하으로 훌륭한 기능들을 가지고 있습니다.

내가 혼란에 나의 논리,또는 않습니다 그것이 의미가 있는 경우 객체를 구현하고 동일한 인터페이스는 배열로,그것을 할 수 있어야에 사용되는 모든 동일한 장소는?

도움이 되었습니까?

해결책

내가 혼란에 나의 논리,또는 의미가 있는 경우에는 개체 동일한 인터페이스를 구현하는 배열할 수 있어야에 사용되는 모두 동일한 장소는?

array 특별한 PHP 변수 유형 개체-등으로 구현하지 않는 모든 인터페이스가 있습니다. ArrayObject 본격적인 개체를 구현하는 수많은 인터페이스(Countable, ArrayAccess, 등.) 할 수 있는 객체처럼 행동하는 배열에 특정한 경우(다음과 같 foreach loop).하는 동안 그래서 그들이 구현하지 않 동일한 인터페이스 때때로 동일하게 동작합니다.

는 이상적인 솔루션을 위한 PHP 을 지원하는 여러 기능을 서명:

function useArray(array $array) { }
function useArray(ArrayObject $array) { }

그러나 우리는(있다면 우리는 이제까지는)당신은 단지 확인해야변수 유형 외부의 함수 정의:

function useArray($array) {
 if (is_array($array) || $array instanceof ArrayObject) {
   // Do some stuff
 } else {
   throw new Exception('I require an array or an array-like structure!');
 }
}

거나 시도 할 array형은 물건과 $array 수 및 처리하는 경고/는 오류를 useArray 을 생성할 수 있습니다.

다른 팁

당신의 유형에 암시를 알리는 그의 유형"배열"하지만 당신의 전달하는"ArrayObj"

function useArray(array $array)
...
useArray(new ArrayObj

그래서 그가는 불평하고 있습니다.

내가 혼란에 나의 논리,또는 의미가 있는 경우에는 개체 동일한 인터페이스를 구현하는 배열할 수 있어야에 사용되는 모두 동일한 장소는?

을 경우 객체를 구현하고 동일한 인터페이스로 다른 클래스,네 당신이 그들을 사용할 수 있는 교대로,하지만 그것은 여전히 유효한 컴파일러에 대해 불평하는 당신의 유형을 암시하기 때문지의 동일한 유형이 있습니다.

기 때문에 그냥 두 개체 동일한 인터페이스를 구현은 의미하지 않은 그들의 동일한 유형이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top