Sınıflar ve Nesneler
PHP Manual

Nesne Yineleme

PHP 5 ile tanımlanan nesneler, foreach gibi bir deyim kullanılarak bir öğe listesi üzerinden yinelenebilirler. Öntanımlı olarak, tüm görünür özellikler yineleme için kullanılacaktır.

Örnek 1 - Basit Nesne Yineleme

<?php
class MyClass
{
    public 
$var1 'değer 1';
    public 
$var2 'değer 2';
    public 
$var3 'değer 3';

    protected 
$protected 'protected var';
    private   
$private   'private var';

    function 
iterateVisible() {
       echo 
"MyClass::iterateVisible:\n";
       foreach(
$this as $key => $value) {
           print 
"$key => $value\n";
       }
    }
}

$class = new MyClass();

foreach(
$class as $key => $value) {
    print 
"$key => $value\n";
}
echo 
"\n";


$class->iterateVisible();

?>

Yukarıdaki örneğin çıktısı:

var1 => değer 1
var2 => değer 2
var3 => değer 3

MyClass::iterateVisible:
var1 => değer 1
var2 => değer 2
var3 => değer 3
protected => protected var
private => private var

Çıktıdan görüleceği gibi, foreach erişilebilir olan tüm görünür değişkenleri yineledi. Bir adım öteye giderek, PHP'nin yerleşik arayüzlerinden biri olan Iterator'ü gerçekleyebilirsiniz. Iterator kullanılarak, hangi nesnenin nasıl yineleneceğine bir nesnenin karar verebilmesi mümkündür.

Örnek 2 - Iterator kullanılarak Nesne Yineleme

<?php
class MyIterator implements Iterator
{
    private 
$var = array();

    public function 
__construct($array)
    {
        if (
is_array($array)) {
            
$this->var $array;
        }
    }

    public function 
rewind() {
        echo 
"başa al\n";
        
reset($this->var);
    }

    public function 
current() {
        
$var current($this->var);
        echo 
"mevcut: $var\n";
        return 
$var;
    }

    public function 
key() {
        
$var key($this->var);
        echo 
"anahtar: $var\n";
        return 
$var;
    }

    public function 
next() {
        
$var next($this->var);
        echo 
"sonraki: $var\n";
        return 
$var;
    }

    public function 
valid() {
        
$var $this->current() !== false;
        echo 
"geçerli: {$var}\n";
        return 
$var;
    }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
    print 
"$a$b\n";
}
?>

Yukarıdaki örneğin çıktısı:

başa al
mevcut: 1
geçerli: 1
mevcut: 1
anahtar: 0
0: 1
sonraki: 2
mevcut: 2
geçerli: 1
mevcut: 2
anahtar: 1
1: 2
sonraki: 3
mevcut: 3
geçerli: 1
mevcut: 3
anahtar: 2
2: 3
sonraki:
mevcut:
geçerli:

Ayrıca, kendi sınıfınızı, Iterator işlevlerinin tümünü her defasında yeniden tanımlamadan, PHP 5 ile birlikte gelen IteratorAggregate arayüzünü gerçekleyerek tanımlayabilirsiniz.

Örnek 3 - IteratorAggregate ile Nesne Yineleme

<?php
class MyCollection implements IteratorAggregate
{
    private 
$items = array();
    private 
$count 0;

    
// IteratorAggregate için gerekli arayüz tanımı
    
public function getIterator() {
        return new 
MyIterator($this->items);
    }

    public function 
add($value) {
        
$this->items[$this->count++] = $value;
    }
}

$coll = new MyCollection();
$coll->add('değer 1');
$coll->add('değer 2');
$coll->add('değer 3');

foreach (
$coll as $key => $val) {
    echo 
"key/value: [$key -> $val]\n\n";
}
?>

Yukarıdaki örneğin çıktısı:

başa al
mevcut: değer 1
geçerli: 1
mevcut: değer 1
anahtar: 0
anahtar/değer: [0 -> değer 1]

sonraki: değer 2
mevcut: değer 2
geçerli: 1
mevcut: değer 2
anahtar: 1
anahtar/değer: [1 -> değer 2]

sonraki: değer 3
mevcut: değer 3
geçerli: 1
mevcut: değer 3
anahtar: 2
anahtar/değer: [2 -> değer 3]

sonraki:
mevcut:
geçerli:

Bilginize:

Yineleyiciler ile ilgili daha fazla örnek için, Iterators bölümüne bakınız.


Sınıflar ve Nesneler
PHP Manual