П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое







Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 98194 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 29079 раз(а).

Учебник HTML.
Просмотров 56201 раз(а).

Руководство по PHP5.
Просмотров 25940 раз(а).

Хостинг через призму DNS.
Просмотров 30469 раз(а).

Подборка текстов стандартных документов.
Просмотров 28983 раз(а).

Учебник PHP - Самоучитель
Просмотров 33731 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 34989 раз(а).

Внешние атаки...
Просмотров 26957 раз(а).

Учебник PHP.
Просмотров 22784 раз(а).

SSI в примерах.
Просмотров 17856 раз(а).



 
 



Руководство по PHP
Пред. Глава 19. Классы и объекты (PHP 5) След.

Итераторы объектов

PHP 5 предоставляет механизм итераторов для получения списка всех свойств какого-либо объекта, например, для использования совместно с оператором Разд. foreach в Гл. 16. По умолчанию, в итерации будут участвовать все свойства, объявленные как public.

Пример 19-21. Итерация простого объекта

<?php

class MyClass {
  
public $var1 = 'value 1';
  
public $var2 = 'value 2';
  
public $var3 = 'value 3';

  
protected $protected = 'protected';
  
private   $private   = 'private';

}

$class = new MyClass();

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

Результат:

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

Как показывает результат, Разд. foreach в Гл. 16 проитерировал все принадлежащие объекту public-свойства. Кроме того, программист может включить (implement) в свой класс один из внутренних Разд. Интерфейсы объектов PHP 5, именуемый Iterator. Это позволит программисту самому определить, каким именно образом будет осуществляться итерация объекта.

Пример 19-22. Объект 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
"перемотка в начало\n";
    
reset($this->var);
  }

  
public function current() {
    
$var = current($this->var);
    echo
"текущий: $var\n";
    return
$var;
  }

  
public function key() {
    
$var = key($this->var);
    echo
"ключ: $var\n";
    return
$var;
  }

  
public function next() {
    
$var = next($this->var);
    echo
"следующий: $var\n";
    return
$var;
  }

  
public function valid() {
    
$var = $this->current() !== false;
    echo
"верный: {$var}\n";
    return
$var;
  }

}

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

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

Результатом выполнения этого кода станет:

перемотка в начало
текущий: 1
верный: 1
текущий: 1
ключ: 0
0: 1
следующий: 2
текущий: 2
верный: 1
текущий: 2
ключ: 1
1: 2
следующий: 3
текущий: 3
верный: 1
текущий: 3
ключ: 2
2: 3
следующий:
текущий:
верный:

Программист также может объявить класс так, чтобы ему не пришлось описывать все методы, перечисленные в интерфейсе Iterator, включая интерфейс PHP 5 IteratorAggregate.

Пример 19-23. Объект 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";
}

?>
</pre>

Результат:

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:


 





Copyright © 2005-2011 Project.Net.Ru