Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ArrayAccess


Автор: crow 16.12.2007, 19:18
Прив всем!

Объясните плиз, как работать с этим интерфейсом, и какие преимущества....

ПЫ.СЫ. или сцылы на доки дайте, а то в тех что нашел, ниче из них не понял...

Автор: Anarki 16.12.2007, 19:24
Чтобы работать с объектом как с ассоциативным массивом - обращаться к переменным объекта посредством квадратных скобок.
Код

$a->prop = 'lala';
$a['prop'] = 'lala';

Автор: crow 16.12.2007, 19:32
Цитата(Anarki @ 16.12.2007,  19:24)
Чтобы работать с объектом как с ассоциативным массивом - обращаться к переменным объекта посредством квадратных скобок.
Код

$a->prop = 'lala';
$a['prop'] = 'lala';

ясно, т.е. объявлять заранее ничего не надо??!

а такая конструкция что будет делать?
Код

class test Implements ArrayAccess {
// Какие нибудь метоты....
}

Автор: Anarki 16.12.2007, 19:51
Цитата(crow @ 16.12.2007,  22:32)
Цитата(Anarki @ 16.12.2007,  19:24)
Чтобы работать с объектом как с ассоциативным массивом - обращаться к переменным объекта посредством квадратных скобок.
Код

$a->prop = 'lala';
$a['prop'] = 'lala';

ясно, т.е. объявлять заранее ничего не надо??!

а такая конструкция что будет делать?
Код

class test Implements ArrayAccess {
// Какие нибудь метоты....
}

Надо.
Наследовать интерфейс и четыре метода с заданными именами реализовать в классе.

Сделать например так.
Код

<?php
class MyClass implements ArrayAccess {
  private $a = array();
  // Возвращает true, если элемент $offset существует.
  public function offsetExists($offset) { 
    $offset = strtolower($offset);  // переводим в нижний регистр
    return isset($this->a[$offset]);
  }
  // Возвращает элемент по его ключу.
  public function offsetGet($offset) { 
    $offset = strtolower($offset);
    return $this->a[$offset]; 
  }
  // Устанавливает новое значение элемента по его ключу.
  public function offsetSet($offset, $data) { 
    $offset = strtolower($offset);
    $this->a[$offset] = $data;
  }
  // Удаляет элемент с указанным ключом.
  public function offsetUnset($offset) { 
    $offset = strtolower($offset);
    unset($this->array[$offset]); 
  }
}
$a = new MyClass();
$a['prop'] = 'hey, this is the value';
echo $a['prop'];
?>

Автор: crow 16.12.2007, 20:43
Цитата(Anarki @ 16.12.2007,  19:51)
Цитата(crow @ 16.12.2007,  22:32)
Цитата(Anarki @ 16.12.2007,  19:24)
Чтобы работать с объектом как с ассоциативным массивом - обращаться к переменным объекта посредством квадратных скобок.
Код

$a->prop = 'lala';
$a['prop'] = 'lala';

ясно, т.е. объявлять заранее ничего не надо??!

а такая конструкция что будет делать?
Код

class test Implements ArrayAccess {
// Какие нибудь метоты....
}

Надо.
Наследовать интерфейс и четыре метода с заданными именами реализовать в классе.

Сделать например так.
Код

<?php
class MyClass implements ArrayAccess {
  private $a = array();
  // Возвращает true, если элемент $offset существует.
  public function offsetExists($offset) { 
    $offset = strtolower($offset);  // переводим в нижний регистр
    return isset($this->a[$offset]);
  }
  // Возвращает элемент по его ключу.
  public function offsetGet($offset) { 
    $offset = strtolower($offset);
    return $this->a[$offset]; 
  }
  // Устанавливает новое значение элемента по его ключу.
  public function offsetSet($offset, $data) { 
    $offset = strtolower($offset);
    $this->a[$offset] = $data;
  }
  // Удаляет элемент с указанным ключом.
  public function offsetUnset($offset) { 
    $offset = strtolower($offset);
    unset($this->array[$offset]); 
  }
}
$a = new MyClass();
$a['prop'] = 'hey, this is the value';
echo $a['prop'];
?>

Огромное спасибо!!!!!!!
)))
Благодарю!

и еще в качестве 

Код

private $a = array();


может выступать произвольная переменная, да (название)?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)