2008-09-28 5 views
6

필요한 모든 SPL 인터페이스를 구현하여 실제 PHP 배열과 사실상 구별 할 수없는 클래스를 작성할 수 있습니까? 그들은 비판적인 것을 놓친 것입니까?PHP의 SPL : 배열과 관련된 인터페이스가 모든 배열 속성을 포함합니까?

더 고급 Array 객체를 만들고 싶습니다. 그러나 사용자 정의 Array 클래스로 대체 한 경우 배열을 사방에 사용하는 기존 응용 프로그램을 손상시키지 않으려합니다.

답변

7

제가 생각할 수있는 유일한 문제는 gettype() 및 is_array() 함수입니다. 그냥 배열과 같은 객체를 사용할 수 있지만, 그것은 여전히 ​​개체로 확인 될 것이기 때문에

gettype($FakeArray) == 'array' 
is_array($FakeArray) 

에 대한 귀하의 코드를 확인 .

+2

은 그렇다하더라도, 그것은 보인다. – Wilco

3

다른 차이는 일반적으로 사용하고 array_mergearray_shift 포함 (병합) 배열을위한 '+'연산자 전체 array_* 기능 장애를 포함한다.

4

위의 사항 외에도 사용자 공간 배열 유형 힌트를 클래스의 인스턴스와 함께 사용할 수 없게됩니다. 예를 들면 :

<?php 
function f(array $a) { /*...*/ } 

$ao = new ArrayObject(); 
f($ao); //error 
?> 

출력 : I 추가 경우를 설명하기 위해 그 기능을 대체 할 override_function() 함수를 사용할 수처럼

Catchable fatal error: Argument 1 passed to f() must be an array, object given