PHP의 SPL : 배열과 관련된 인터페이스가 모든 배열 속성을 포함합니까?

StackOverflow https://stackoverflow.com/questions/145376

  •  02-07-2019
  •  | 
  •  

문제

필요한 모든 SPL 인터페이스를 구현하여 실제 PHP 배열과 거의 구별 할 수없는 클래스를 작성할 수 있습니까? 그들은 중요한 것을 놓치고 있습니까?

보다 고급 배열 객체를 빌드하고 싶지만 사용자 정의 배열 클래스로 대체 한 경우 모든 곳에서 배열을 사용하는 기존 앱을 깨지 않도록하고 싶습니다.

도움이 되었습니까?

해결책

내가 생각할 수있는 유일한 문제는 gettype ()와 is_array () 함수입니다. 코드를 확인하십시오

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

배열처럼 객체를 사용할 수 있지만 여전히 객체로 식별됩니다.

다른 팁

위의 포인트 외에도 사용자 공간 배열 유형 힌트가 클래스 인스턴스와 함께 작동하게 할 수 없습니다. 예를 들어:

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

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

산출:

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

다른 차이점에는 배열 용 '+'연산자 (병합)와 전체의 실패가 있습니다. array_* 일반적으로 사용되는 기능 array_merge 그리고 array_shift.

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