Изминения в PHP 4

Хотя PHP 4 был еще одним революционным шагом в развитии языка, большинст­во основных изменений произошло незаметно для пользователя на нижнем уровне. Для расширения возможностей языка PHP был заново переписан движок Zend Engine, название которого происходит от имен Zeev и Andi. Zend Engine— один из основных компонентов, положенных в основу работы PHP. Любая вызываемая РНР-функция на самом деле является частью яруса высокоуровневых расширений. Эти функции выполняют всю возложенную на них работу, например взаимодействие с API системы управления базами данных или манипуляции со строками. А на ниж­нем уровне Zend Engine управляет памятью, передает управление другим компонен­там и преобразует знакомый вам PHP-синтаксис, с которым вы работаете каждый день, в исполняемый байт-код. Именно движок Zend Engine мы должны «благода­рить» за поддержку ключевых возможностей языка, таких как классы.

С точки зрения рассматриваемых нами объектов, большим преимуществом PHP 4 стала возможность переопределения родительских методов и получения к ним доступа из дочерних классов.

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

$my_obj = new User(‘bob’); $other = $my_obj;

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

К счастью, в сценарии можно было принудительно осуществить передачу объекта по ссылке, но для этого нужно было использовать довольно «неуклюжую» конструкцию.

Выполним присвоение по ссылке следующим образом.

$other =& $my_obj;

// $other и $my_obj указывают на один и тот же объект

Выполним передачу по ссылке следующим образом.

function setSchool( & $school ) {

// $school теперь ссылается на сам объект, а не на его копию }

И осуществим возврат по ссылке.

function & getSchool( ) {

// Возврат ссылки на объект, а не его копии

return $this->school;

}

Хотя эта конструкция работала нормально, программисты легко забывали до­бавить символ амперсанда, и вероятность появления ошибок в объектно-ориенти­рованном коде была очень высока. Причем такие ошибки очень трудно было обна­ружить, потому что они редко вызывали сообщения об ошибках; только программа работала не совсем так, как нужно.

Описание синтаксиса в целом и объектов в частности было расширено в руко­водстве по PHP, и объектно-ориентированное программирование стало превра­щаться в основное направление, главную тенденцию. Объекты в PHP не были при­няты сообществом программистов без споров, и сообщения типа «Зачем мне нужны эти объекты?» часто раздували флеймы на форумах. На сайте Zend размещались статьи, которые поощряли объектно-ориентированное программирование, наряду со статьями, в которых звучали предостережения.

Но несмотря на проблемы передачи по ссылке и споры, многие программисты просто приняли новые возможности и «усеяли» свои коды символами амперсандов. Популярность объектно-ориентированного PHP стала расти.

Одним из величайших неожиданных поворотов в истории PHP было то, что несмотря на очень ограниченную функциональность, на множество проблем и ограничений, объектно-ориентированное программирование в PHP процветало и стало самой популярной парадигмой для растущего числа стандартных РНР приложений. Эта тенденция которая по большей части была неожиданной застала PHP не в самой выигрышной ситуации. Стало очевидным, что объекты ведут себя не так, как объекты в других объектно-ориентированных языках, а как ассоциативные массивы.

Как отмечалось, интерес к объектно-ориентированному проектированию стал очевиден по растущему числу публикаций статей на сайтах и в форумах в Интернете. В официальном хранилище программного обеспечения PHP, PEAR, тоже была принята концепция объектно-ориентированного програм­мирования. Некоторые из лучших примеров использования шаблонов объектно-риентированного проектирования можно найти в пакетах PEAR, созданных для увеличения функциональности PHP.

Оглядываясь на прошлое, можно подумать, что введение в PHP поддержки средств объектно-ориентированного программирования стало результатом выну­жденной капитуляции перед лицом неизбежности. Но важно помнить, что хотя концепция объектно-ориентированного программирования существует с 60-х го­дов прошлого века, широкое распространение она получила только в середине 90-х годов. Язык Java, этот «великий популяризатор» методологии объектно-ориентиро­ванного программирования, был выпущен только в 1995 году. Язык С++, расшире­ние процедурного языка С, появился в 1979 году. И после длительного этапа эво­люции он совершил большой скачок только в 90-х годах. В 1994 году вышел язык Perl 5. Это была еще одна революция для бывшего процедурного языка, что дало возможность пользователям перейти к концепции объектов (хотя некоторые ут­верждают, что поддержка объектно-ориентированных возможностей в Perl напо­минает добавления, сделанные задним числом). Для небольшого процедурного языка, в PHP поддержка объектов была разработана удивительно быстро, что про­демонстрировало оперативный отклик на требования пользователей.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Перед отправкой формы: