FilterIterator를 사용하여 값을 필터링하고 accept() 메서드를 성공적으로 구현했습니다. 그러나 단일 반복에서 내 accept 메서드에서 false를 반환하는 값을 얻는 것이 어떻게 가능할 지 궁금합니다. 아래 코드를 예로 들어 봅시다 (php.net에서 가져옴).FilterIterator에서 전달하지 않는 값을 가져 오는 방법
class UserFilter extends FilterIterator
{
private $userFilter;
public function __construct(Iterator $iterator , $filter)
{
parent::__construct($iterator);
$this->userFilter = $filter;
}
public function accept()
{
$user = $this->getInnerIterator()->current();
if(strcasecmp($user['name'],$this->userFilter) == 0) {
return false;
}
return true;
}
}
위의 코드에서 필터는 값을 직접 필터링하고 필터iterator에서 전달 된 값을 반환합니다. 다음과 같이 구현되었습니다.
$array = array(
array('name' => 'Jonathan','id' => '5'),
array('name' => 'Abdul' ,'id' => '22')
);
$object = new ArrayObject($array);
$iterator = new UserFilter($object->getIterator(),'abdul');
이 이름 조나단 만 배열을 포함합니다. 그러나 나는 Abdul이라는 이름의 객체를 다른 변수에 저장하는 것이 궁금하여 대신에 약간의 덧셈을 사용하여 같은 필터를 사용하여 전체 필터를 다시 구현하여?을 수행합니다. 필자가 생각한 한 가지 방법은 FilterIterator를 붙여 넣기를 복사하고 기본적으로 값을 및 거짓으로 변경하는 것입니다. 그러나 목록에 또 다른 통과가 필요할 것이므로 깔끔한 방법이 있습니다.