>  기사  >  백엔드 개발  >  PHP 트래버스 객체

PHP 트래버스 객체

伊谢尔伦
伊谢尔伦원래의
2016-11-23 14:01:151699검색

PHP 5에서는 foreach 문을 사용하는 등 셀 목록을 통해 탐색할 수 있도록 객체를 정의하는 방법을 제공합니다. 기본적으로 모든 표시 속성은 순회에 사용됩니다.

예제 #1 단순 객체 탐색

class MyClass
{
    public $var1 = 1;
    public $var2 = 2;
    public $var3 = 3;
    protected $protected = 'protected var';
    private $private = 'private var';
    function iterateVisible(){
        echo "MyClass::iterateVisible:<br>";
        foreach($this as $key => $value){
            print "$key=>$value<br>";
        }
    }
} 
$class = new MyClass();
foreach($class as $key => $value){
    print "$key => $value<br>";
}
echo "<br>";
$class->iterateVisible();

출력 결과:

var1 => 1

var2 => 🎜>var3 => 3

MyClass::iterateVisible:

var1=>1

var2=>2

var3=> 3

protected=>protected var

private=>private var

위에 표시된 것처럼 foreach는 액세스할 수 있는 모든 표시 속성을 순회합니다.

더 나아가 Iterator 인터페이스를 구현해 보세요. 객체가 탐색 방법과 탐색할 때마다 어떤 값을 사용할 수 있는지 결정하도록 할 수 있습니다.

출력 결과:
class MyIterator implements Iterator{
    private $var = array();
    public function __construct($array)
    {
        if(is_array($array)){
            $this->var = $array;
        }
    }
    public function rewind(){
        echo "rewinding<br>";
        reset($this->var);
    }
    public function current(){
        $var = current($this->var);
        echo "current:$var<br>";
        return $var;
    }
    public function key(){
        $var = key($this->var);
        echo "key:$var<br>";
        return $var;
    }
    public function next(){
        $var = next($this->var);
        echo "next:$var<br>";
        return $var;
    }
    public function valid(){
        $var = $this->current()!==false;
        echo "valid:$var<br>";
        return $var;
    }
}
$values = array(1,2,3);
$it = new MyIterator($values);
foreach($it as $a => $b){
    print "$a:$b<br>";
}

되감기

현재:1

유효:1

현재:1

키:0

0:1

다음:2

현재:2

유효:1

현재:2

키:1

1:2

다음:3

현재:3

유효:1

현재:3

키:2

2:3

다음:

현재:

유효:

모든 Iterator 메서드를 구현하는 대신 IteratorAggregate 인터페이스를 사용할 수 있습니다. IteratorAggregate는 Iterator를 구현하는 클래스의 인스턴스를 반환해야 하는 IteratorAggregate::getIterator()라는 하나의 메서드만 구현하면 됩니다.

예제 #3 IteratorAggregate를 구현하여 객체 트래버스

출력 결과:
include_once(&#39;class2.php&#39;);
class MyCollection implements IteratorAggregate
{
    private $items = array();
    private $count = 0;
    public function getIterator(){
       return new MyIterator($this->items);
    }
    public function add($value){
        $this->items[$this->count++] = $value;
    }
}
$coll = new MyCollection();
$coll -> add(&#39;1&#39;);
$coll -> add(&#39;2&#39;);
$coll -> add(&#39;3&#39;);
foreach($coll as $k => $v){
    echo "key/value:[$k->$v]<br><br>";
}

되감기

현재:1

유효: 1

현재:1

키:0

키/값:[0->1]

다음: 2

현재:2

유효:1

현재:2

키:1

키/값:[1 - >2]

다음:3

현재:3

유효:1

현재:3

키:2

키/값:[2->3]


다음:

현재:

유효:

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.