|
Zend 2.0. Что нового?Источник: http://wa.artel.by/ Михаил Дубаков В скором времени движок Zend 2 будет составлять ядро PHP. Неплохо бы уже сейчас знать, чем новое ядро отличается от старого. В основном меня интересуют изменения в Объектной модели, так что в цикле переводов ей будет уделено особое внимание. Исправление объектной моделиПредпосылкиВ Zend 1.0 (который является ядром PHP) объектная модель была спроектирована так, что создаваемые объекты были переменными языка. Это значит, что когда программисты производили операции, например, объявление переменной и передачу параметра функции, объекты обрабатывались практически так же, как простые типы integer или string. Семантически это означает, что целый объект копируется. В Java совсем другой подход, когда ссылаться на объект можно по указателю, а не по переменной (можно рассматривать указатель как ID объекта). НеобходимостьК сожалению, существующий подход в Zend Engine 1.0 вызывает ограничения в объектной модели. Главная проблемы в том, что очень сложно контролировать создание и дублирование объектов. Это ведет к неэффективной разработке и иногда вызывает странное поведение программы при запуске. Изменение объектной модели на указатель-ориентированную позволит ввести такие полезные вещи, как деструкторы, полный контроль над дублированием объектов и т.п. ОбзорПредлагаемая объектная модель взяла многое из модели в Java. В общем, когда вы создаете новый объект, вы получаете указатель на объект, а не сам объект. Когда этот указатель посылается функции, объявляется или копируется, это всего лишь указатель, который посылается/объявляется/копируется. Сам объект никогда не копируется и не дублируется. В результате получается, что все указатели объекта ссылаются на один и тот же объект. Это устраняет ненужное дублирование объектов и их странное поведение. ФункциональностьПосле изменения объектной модели, манипуляции с объектами останутся практически неизменными. Однако вы больше не будете сталкиваться с неуклюжим и странным копированием и уничтожением объектов. Для того, чтобы создать и использовать экземпляр объекта, необходимо сделать следующее:
В этом коде переменная $object является указателем на экземпляр объекта класса MyClass и вызывается один из методов данного класса. Рассмотрим следующий код:
Без Java-подобных указателей в строке 20 свойство member объекта MyClass принимает строковое значение "bar". Из-за внутреннего представления объектов в Zend 1.0, объект помечается как ссылка и когда он посылается как переменная в функцию foo, он дублируется (!). Поэтому вызов функции foo() в строке 21, которая вызывает $obj->setMember("foo"), будет выполняться для дубликата $object. В строке 22 будет выведено "bar", хотя по идее должно выводится "foo". Именно так сейчас работает объектная модель. Большинство разработчиков и не подозревает, что они зачастую работают не с самими объектами, а с их дубликатами. Новая объектная модель позволяет писать более интуитивный код. В строке 21 в функцию foo() будет передаваться указатель (ID) объекта. В самой функции по указателю будет вызываться сам объект, а не его копия. Поэтому в строке 22 будет выведено "foo", что и ожидается. Такой подход позволяет разработчику контролировать, когда объект создается и когда дублируется. Кроме того, из-за отсутствия такого дублирования увеличится производительность скрипта. Это лишь краткое описание того, почему новая объектная модель устраняет нелогичное поведение и делает манипуляции с объектами более простыми, интуитивными и эффективными. Важность этих изменений будет понятна позже, потому что они служат базисом для новых свойств.
|
Copyright © <LMTH>. Все материалы являются собственностью их авторов.
При перепечатывании ссылка на http://www.magaz.org/ как на источник информации обязательна. Правила использования материалов журнала |