Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ArrayAccess, интерфейс ArrayAccess 
:(
    Опции темы
crow
Дата 16.12.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.6.2007
Где: Россия->Кислов одск

Репутация: нет
Всего: нет



Прив всем!

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

ПЫ.СЫ. или сцылы на доки дайте, а то в тех что нашел, ниче из них не понял...
PM MAIL   Вверх
Anarki
Дата 16.12.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 7
Всего: 11



Чтобы работать с объектом как с ассоциативным массивом - обращаться к переменным объекта посредством квадратных скобок.
Код

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



--------------------
PM WWW   Вверх
crow
Дата 16.12.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.6.2007
Где: Россия->Кислов одск

Репутация: нет
Всего: нет



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

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

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

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

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

PM MAIL   Вверх
Anarki
Дата 16.12.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 7
Всего: 11



Цитата(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'];
?>


Это сообщение отредактировал(а) Anarki - 16.12.2007, 19:55


--------------------
PM WWW   Вверх
crow
Дата 16.12.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.6.2007
Где: Россия->Кислов одск

Репутация: нет
Всего: нет



Цитата(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();


может выступать произвольная переменная, да (название)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.