П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство по 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-2016 Project.Net.Ru