کلاس‌‌ها و اشیا (PHP 5)
PHP Manual

تکرار شی

PHP 5 راهی برای تعریف اشیا فراهم نموده است که امکان حرکت میان فهرستی از اشیا را مقدور می‌سازد تا با جمله foreach برای نمونه حرکت نماید. به صورت پیشفرض تمام ویژگی‌های visible برای تکرار استفاده می‌شود.

Example #1 تکرار ساده شی

<?php
class MyClass
{
    public 
$var1 'value 1';
    public 
$var2 'value 2';
    public 
$var3 'value 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();

?>

The above example will output:

var1 => value 1
var2 => value 2
var3 => value 3

MyClass::iterateVisible:
var1 => value 1
var2 => value 2
var3 => value 3
protected => protected var
private => private var

همانطور که خروجی نشان می‌دهد foreach تکرار شده در تمام متغیرهای visible می‌توانند مورد دسترسی واقع شوند. برای پیشبرد یک قدم بیشتر شما می‌توانید واسط‌های داخلی PHP 5 با نام Iterator را پیاده نمایید. این کار به شی امکان می‌دهد تا تصمیم گیرد چگونه و چه شی را باید تکرار نماید.

Example #2 Iteration شی پیاده‌سازی کننده Iterator

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

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

    public function 
rewind() {
        echo 
"rewinding\n";
        
reset($this->var);
    }

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

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

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

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

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

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

The above example will output:

rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:

شما می‌توانید کلاس خود را تعریف نمایید تمام توابع Iterator را با پیاده‌سازی واسط IteratorAggregate PHP 5 تعریف ننمایید.

Example #3 Iteration شی پیاده‌سازی کننده IteratorAggregate

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

    
// Required definition of interface IteratorAggregate
    
public function getIterator() {
        return new 
MyIterator($this->items);
    }

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

$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');

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

The above example will output:

rewinding
current: value 1
valid: 1
current: value 1
key: 0
key/value: [0 -> value 1]

next: value 2
current: value 2
valid: 1
current: value 2
key: 1
key/value: [1 -> value 2]

next: value 3
current: value 3
valid: 1
current: value 3
key: 2
key/value: [2 -> value 3]

next:
current:
valid:

Note:

برای مثال‌های بیشتر ضمیمه SPL را ببینید.


کلاس‌‌ها و اشیا (PHP 5)
PHP Manual