Профессиональное программирование на PHP

Страница 71 из 591


74 Глава 2 Объектно-ориентированное программирование...

> PHP 20.PHP

Type assignment error (Ошибка назначения типа)

J? ^ен_>letin*me' Arrav <t°l => George)) called at [(null):3] #1 typed->unknown(name, Array ([0] => George)) called at l/Users/george/Advanced РНР/examples/chapter-2/20.PHP:2 8]

SPL и итераторы

В обоих предшествующих примерах создавались объекты, которые должны функционировать как массивы. В большинстве случаев все работает, однако еще необходимо интерпретировать их как объекты для доступа. Например, такой код работает: $value = $obj->name;

Но следующий код генерирует ошибку времени выполнения: $value = $obj['name' ] ;

Удручает также то, что для них невозможно использовать обычные методы итерации массивов. Приведенный ниже код также генерирует ошибку времени выполнения: foreach($obj as $k => $v) {}

Для того чтобы заставить данный код работать с определенными объектами Маркус Боергер (Marcus Boerger) написал для РНР 5 расширение SPL (Standard РНР Library - стандартная библиотека РНР). SPL предоставляет группу интерфейсов и обращается к процессору Zend Engine, поддерживающему РНР, чтобы итератор и функции доступа к массивам могли работать с классами, реализующими данные интерфейсы

Интерфейс, который SPL определяет для поддержки доступа в стиле массива представлен следующим кодом:

interface ArrayAccess {

function offsetExists($key);

function offsetGet($key);

function offsetSet($key, $value); ^ function offsetUnset($key);

Конечно, ввиду того, что этот интерфейс определен в С-коде, это определение невидимо, но преобразованное в РНР оно выглядело бы так.

Чтобы полностью завершить объектно-ориентированный интерфейс к классу Tied и придать операциям доступа вид массивов, можно заменить операции qet () и_set () следующим образом: 

function offsetGet($name)

$data = dba_fetch($name, $this->dbm); if($data) {

^ return unserialize($data);

else {

return false;

} 1

function offsetExists($name)

return dba_exists($name, $this->dbm);



  • Электронные счетчики воды и еще.
  • рекламное агентство королев

  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006