На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Сайтостроительство » HTML/DHTML

Zend 2.0. Что нового?

В скором времени движок Zend 2 будет составлять ядро PHP. Неплохо бы уже сейчас знать, чем новое ядро отличается от старого. В основном меня интересуют изменения в Объектной модели, так что в цикле переводов ей будет уделено особое внимание.

Исправление объектной модели

Предпосылки

В Zend 1.0 (который является ядром PHP) объектная модель была спроектирована так, что создаваемые объекты были переменными языка. Это значит, что когда программисты производили операции, например, объявление переменной и передачу параметра функции, объекты обрабатывались практически так же, как простые типы integer или string. Семантически это означает, что целый объект копируется. В Java совсем другой подход, когда ссылаться на объект можно по указателю, а не по переменной (можно рассматривать указатель как ID объекта).

Необходимость

К сожалению, существующий подход в Zend Engine 1.0 вызывает ограничения в объектной модели. Главная проблемы в том, что очень сложно контролировать создание и дублирование объектов. Это ведет к неэффективной разработке и иногда вызывает странное поведение программы при запуске. Изменение объектной модели на указатель-ориентированную позволит ввести такие полезные вещи, как деструкторы, полный контроль над дублированием объектов и т.п.

Обзор

Предлагаемая объектная модель взяла многое из модели в Java. В общем, когда вы создаете новый объект, вы получаете указатель на объект, а не сам объект. Когда этот указатель посылается функции, объявляется или копируется, это всего лишь указатель, который посылается/объявляется/копируется. Сам объект никогда не копируется и не дублируется. В результате получается, что все указатели объекта ссылаются на один и тот же объект. Это устраняет ненужное дублирование объектов и их странное поведение.

Функциональность

После изменения объектной модели, манипуляции с объектами останутся практически неизменными. Однако вы больше не будете сталкиваться с неуклюжим и странным копированием и уничтожением объектов. Для того, чтобы создать и использовать экземпляр объекта, необходимо сделать следующее:

$object = new MyClass();
$object->method();

В этом коде переменная $object является указателем на экземпляр объекта класса MyClass и вызывается один из методов данного класса.

Рассмотрим следующий код:

1 class MyClass
2 {
3 function setMember($value)
4 {
5 $this->member = $value;
6 }
7
8 function getMember()
9 {
10 return $this->member;
11 }
12 }
13
14 function foo($obj)
15 {
16 $obj->setMember("foo");
17 }
18
19 $object = new MyClass();
20 $object->setMember("bar");
21 foo($object);
22 print $object->getMember();

Без Java-подобных указателей в строке 20 свойство member объекта MyClass принимает строковое значение "bar". Из-за внутреннего представления объектов в Zend 1.0, объект помечается как ссылка и когда он посылается как переменная в функцию foo, он дублируется (!). Поэтому вызов функции foo() в строке 21, которая вызывает $obj->setMember("foo"), будет выполняться для дубликата $object. В строке 22 будет выведено "bar", хотя по идее должно выводится "foo".

Именно так сейчас работает объектная модель. Большинство разработчиков и не подозревает, что они зачастую работают не с самими объектами, а с их дубликатами.

Новая объектная модель позволяет писать более интуитивный код. В строке 21 в функцию foo() будет передаваться указатель (ID) объекта. В самой функции по указателю будет вызываться сам объект, а не его копия. Поэтому в строке 22 будет выведено "foo", что и ожидается. Такой подход позволяет разработчику контролировать, когда объект создается и когда дублируется. Кроме того, из-за отсутствия такого дублирования увеличится производительность скрипта.

Это лишь краткое описание того, почему новая объектная модель устраняет нелогичное поведение и делает манипуляции с объектами более простыми, интуитивными и эффективными. Важность этих изменений будет понятна позже, потому что они служат базисом для новых свойств.

Источник: Zend
Перевод: Михаил Дубаков
Web-анатомия

Спонсор раздела

Рассылки Subscribe.ru:

Библиотека сайтостроительства - новости, статьи, обзоры
Дискуссионный лист для web-разработчиков
Подписка на MailList.Ru
Автор: NunDesign
Другие разделы
Оптимизация сайтов
Web-студии
» Новое в разделе
Web-дизайн
Web-программирование
Интернет-реклама
Раскрутка сайта
Web-графика
Flash
Adobe Photoshop
Рассылка
Инструменты вебмастера
Контент для сайта
HTML/DHTML
Управление web-проектами
CSS
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100