문제

나는 구현하는 물건이 있습니다 ArrayAccess, 반복자 그리고 셀 수 있는. 이로 인해 완벽한 배열 마스킹이 생성됩니다. 오프셋으로 액세스 할 수 있습니다 ($object[foo]), 나는 그것을 a에 던질 수있다 foreach-루프 및 기타 많은 것들.

그러나 내가 할 수없는 것은 기본 배열 반복자 함수에주는 것입니다.next(), reset(), current(), key()), 반복자에서 필요한 방법을 구현했지만. PHP는 완고하게 멤버 변수를 반복하려고 시도하고 반복적 인 방법을 완전히 무시하는 것 같습니다.

나머지 어레이 트레이버링 기능에 객체를 연결하는 인터페이스가 있습니까, 아니면 내가 가진 것을 붙잡고 있습니까?

업데이트: 반복적 인 도구는 대답이 아닌 것 같습니다. 사용되는 동안 foreach-Loops, 기본 배열 반복자 기능은 메소드를 호출하지 않습니다.

도움이 되었습니까?

해결책

PHP의 최근 변경 사항은 표준 어레이 함수 (재설정, 다음 등)를 사용하여 배열 어레이어를 조작하는 것을 방지합니다.

곧 복원해야합니다.http://news.php.net/php.internals/42015

다른 팁

이 작업을 수행하는 한 가지 방법은 별도의 클래스에서 자신의 반복자를 정의한 다음 기본 반복기 대신 해당 새 반복기를 사용하도록 메인 클래스에 알려주는 것입니다.

class MyIterator implements Iterator {
  public function key() {
    //
  }

  public function rewind() {
    //
  }

  // etc.

}

class MyMainClass implements IteratorAggregate {
  private $_data = array();

  // getIterator is required for the IteratorAggregate interface.
  public function getIterator() {
    return new MyIterator($this->_data);
  }

  // etc.

}

그런 다음 필요한만큼 통제 할 수 있어야합니다. (그리고 여러 수업에서 자신의 Myiterator를 재사용 할 수 있습니다).

위의 테스트는 수행되지 않았지만 원칙은 정확합니다.

도움이 되었기를 바랍니다!

~이다 어레이 시어터 당신이 찾고있는 것이 아닌가? 또는에 대해 ArrayObject, 이것은 당신이 달성하려는 것에 대한 SPL의 인터페이스 인 것 같습니다.

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