Развитие объектной ориентированности PHP
Категория реферата: Рефераты по информатике, программированию
Теги реферата: шпаргалки по математике транспорт реферат, инновационная деятельность
Добавил(а) на сайт: Kaljagin.
1 2 3 | Следующая страница реферата
Развитие объектной ориентированности PHP
Перевёл Бресь Сергей, http://phpclub.ru/
Одной из главных составляющих планируемой 5-й версии PHP станет Zend Engine 2.0, поддерживающий совершенно новую модель объектно-ориентированного программирования. Эта статья описывает развитие поддержки объектно-ориентированного программирования в PHP, включая новые возможности и изменения, запланированные в PHP 5.
Как всё это начиналось?
Об этом знают немногие, но когда то, что сегодня известно как PHP, только формировалось летом 1997 года, — не планировалось, что оно будет иметь какие-либо объектно-ориентированные возможности. Andi Gutmans и я работали над созданием мощного, надёжного и эффективного web-языка, основанного главным образом на PHP/FI 2.0 и синтаксисе языка C. В сущности, мы были достаточно далеки от каких-либо намерений относительно классов или объектов — это должен был быть просто структурированный язык. Однако, в одну из тех летних ночей, 27 августа всё изменилось.
Классы были добавлены в код, ставший основой версии PHP 3.0. Добавлены они были как синтаксическое украшение для организации доступа к наборам данных. PHP уже поддерживал понятие ассоциативных массивов, и добавленное новшество было ничем иным, как новым необычным способом доступа к подобным наборам. Тем не менее, как показало время, этот новый синтаксис оказал гораздо более серьёзное влияние на PHP, чем планировалось изначально.
Ещё одним неизвестным для большинства фактом является то, что в пору официального появления PHP 3.0 в середине 1998-го, когда он ошеломляющими темпами набирал силу, Andi Gutmans'ом и мной уже было решено переписать реализацию языка. PHP мог нравиться пользователям в существующем виде (на самом деле, мы знали, что он им нравится), но как создатели двигателя мы знали, что творится под капотом, и мы не могли с этим мириться. Переписанный код, позже получивший прозвище 'Zend Engine' (Zend является комбинацией Zeev и Andi), положил начало и стал одной из основных составляющих второй перестройки, которую пережил PHP за период чуть более года.
Тем не менее, эта перестройка оставила объектную модель PHP, по большей части, не изменившейся с версии 3 — она всё ещё была упрощённой. Объекты до сих пор в значительной мере были синтаксическим украшением для ассоциативных массивов и не предоставляли пользователям достаточного количества дополнительных возможностей.
Объекты в прежние времена
Итак, что мы могли делать с объектами во времена PHP 3.0 и даже в текущей версии PHP 4.0? На самом деле, — немногое. Объекты были по сути дела хранилищами свойств, наподобие ассоциативных массивов. Наибольшим отличием являлось то, что объекты должны были принадлежать к какому-либо классу. Классы, как и в других языках, содержали набор свойств и методов (функций), и экземпляры объектов могли создаваться из них с помощью оператора new. Поддерживалось единичное наследование, позволяющее пользователям расширять (или сужать) рамки существующего класса без необходимости писать класс наново или создавать его копию. Наконец, PHP 4.0 также добавил возможность вызывать методы заданного класса как в контексте использования объекта, так и вне его.
Одним из важнейших поворотных моментов в истории PHP было то, что, несмотря на очень ограниченную функциональность и массу проблем и ограничений, объектно-ориентированное программирование в PHP процветало и становилось самой популярной парадигмой увеличивающегося числа законченных PHP-приложений. Эта тенденция, бывшая по большей части неожиданной, поставила PHP в невыгодное положение. Начинал проявляться тот факт, что объекты вели себя не как в других ОО языках, а как ассоциативные массивы.
Ограничения прежней объектной модели
Самой проблематичной стороной объектно-ориентированной модели PHP 3 / PHP 4 было то, что объекты передавались по значению, а не по ссылке. Что это означает?
Скажем, у вас есть простая, несколько бесполезная функция, называемая myFunction():
<?php
function myFunction($arg) {
$arg = 5;
}
?>
и вы вызываете эту функцию:
<?php
$myArgument = 7;
myFunction($myArgument);
print $myArgument;
?>
Как вы, наверное, знаете, вызов myFunction() не изменит $myArgument; переданное в myFunction() — это копия значения $myArgument, а не сама переменная $myArgument. Этот способ передачи аргумента называется передачей аргументов по значению. Передача аргументов по ссылке { По-моему, — это опечатка; думаю, имелось в виду — "по значению". } реализована почти во всех структурированных языках и чрезвычайно полезна, так как позволяет вам писать свои или вызывать чужие функции, не беспокоясь о побочных эффектах, которые они могут оказать на "внешние" для них переменные.
Однако рассмотрим следующий пример:
<?php
function wed($bride, $groom) {
Рекомендуем скачать другие рефераты по теме: решебник по русскому, скачать решебник.
1 2 3 | Следующая страница реферата