Введение
Данная статья, прежде всего, предназначена для программистов на PHP, которые
интересуются самыми последними усовершенствованиями языка.
В этой статье я прослежу историю языка PHP с самого начала до текущего
состояния дел. И приведу свое мнение о будущем развитии этого языка
программирования.
История PHP
PHP/FI: история с ископаемых времен
Первая версия PHP называлась PHP/FI и была создана Расмусом Лердорфом в
далеком 1995 году. Это был еще не язык программирования, а всего лишь набор
скриптов на языке Perl. Расмус Лердорфм использовал PHP/FI для сбора статистики
посещаемости своей домашней страницы, на которой находилось его резюме. Как это
обычно бывает, требовалась все большая функциональность, и Расмус пишет (уже на
языке С) новую версию, которую можно использовать для разработки более серьезных
веб-приложений. С этих самых пор PHP становится "Open source"-проектом.
PHP/FI расшифровывается как Personal Home Page / Forms Interpreter, что можно
перевести, как "интерпретатор форм для домашних страниц". Уже в этой версии PHP
имел много общего с сегодняшней версией: переменные в стиле Perl, автоматическую
интерпретацию форм, возможность встраиваться в HTML код. Язык, как не трудно
догадаться, был похож на Perl, хотя синтаксис стал более понятным (да простят
меня поклонники Perl'а) и менее гибким.
Вторая версия PHP/FI выходит в 1997 году. Число пользователей значительно
выросло по сравнению с предыдущей версией. К тому же разработкой уже занимается
не один человек. Но вторую версию нельзя назвать слишком удачной, так как...
PHP3: прорыв
... в этом же году выходит третья версия PHP. Энди Гутманс (Andi Gutmans) и
Зив Сураски (Zeev Suraski) полностью переписали интерпретатор и назвали свой
язык просто PHP. Аббревиатура PHP содержит рекурсивный акроним, и
расшифровывается, как "PHP: Hypertext Preprocessor", то есть "препроцессор
гипертекста". Изначально PHP3 разрабатывался для электронной торговли, но стал
использоваться и в других веб-приложениях. Официальный релиз третей версии был
выпущен в 1998 году, когда он пользовались на сотнях тысячах веб-сайтов, и был
установлен приблизительно на 10% Интернет-серверов.
PHP4: следующий шаг к успеху
Сразу после выхода PHP3, Энди Гутманс и Зив Сураски стали работать над
четвертой версией языка. Прежде всего, было переработано ядро, в результате чего
был создан новый движок, который получил название Zend Engine (от слияния имен
Zeev и Andi). Официальная версия PHP4 вышла в 2000 году и включала ряд
существенных доработок. Прежде всего, это полноценная поддержка сессий,
безопасные способы получение данных от пользователя, буферизация вывода и
нововведения в самом языке. PHP4 пользуются уже несколько миллионов сайтов, что
составляет более 20% доменов Интернета.
В четвертой версии появилась поддержка объектно-ориентированного
программирования (поддержку ООП в PHP3 трудно назвать даже поддержкой). Я
употребляю термин поддержка, потому что назвать PHP4 полностью
объектно-ориентированным языком программирования трудно. Но даже такую
примитивную реализацию основных концепций ООП разработчики с удовольствием
использовали.
PHP5: продолжение следует?
Сейчас набирает обороты пятая версия PHP. В этой версии язык стал по
настоящему объектно-ориентированным и стал более похожем на Java, чем на Perl.
Позволю себе кратко перечислить новые возможности в этой области:
- Конструкторы и деструкторы
- Исключения
- Абстрактные классы и методы
- Интерфейсы
- Области видимости членов класса
- Статические члены класса
- Константные члены класса и классы
- Не переопределяемые члены класса и классы
- Параметры с типом
Разумеется, в PHP5 поддерживаются различные передовые технологии, такие как
XML и SOAP. Не осталась в стороне и работа с базами данных: появилось новое
расширение MySQLi, которое поддерживает все последние "навороты" MySQL 4.1.
PHP6: нет предела совершенству
В жесткой схватке со своими конкурентами (Perl, ASP) язык PHP должен
постоянно совершенствоваться. Что же можно сделать, чтобы еще улучшить язык?
Стандартная библиотека
Каждый язык программирования состоит собственно из самого языка и стандартной
библиотеки. Существуют тысячи различных нестандартных библиотек для PHP, но есть
и пару стандартных вроде PEAR и PECL. Очень бы хотелось иметь одну
стандартную объектно-ориентированную библиотеку, которая бы распространялась
вместе с PHP. В такую библиотеку должны входить как различные классы для работы
с БД, XML и так далее, так и классы для простого создания сайтов, например,
гостевые, форумы, ... В последней версии PHP уже появились стандартные классы
для работы БД, но это только первый шаг.
Типизированные переменные
Сейчас принято считать язык полностью объектно-ориентированным, если все
переменные являются объектами, например C#. В PHP тип переменной вообще
определяется интерпретатором, а приведение типов осуществляется
автоматически.
Для языка, основной задачей которого является вывод текста, это, конечно,
плюс, ведь любую переменную можно легко привести к строковому типу. ООП
предлагает другое решение: каждый тип, который нужно представить в виде строки,
должен иметь метод для явного преобразования типов. В PHP такой метод называется
__tostring():
class String
{
private $S = '';
public function __construct($S = '')
{
$this->S = $S;
}
public function __tostring()
{
return $this->S;
}
}
$S = new String("Hello, world!");
echo $S;
В данном примере я показал, как может выглядеть простейшая реализация класса
для работы со строками. Конечно, сюда надо добавить методы для различных
операций со строками: сложение, поиск и тому подобные.
Производительность
Для интерпретируемых языков производительность всегда больная тема. Создатели
PHP прикладывают максимум усилий для увеличения производительности своего
детища. Надеюсь, они не оставят своих усилий в этом направлении, и когда-нибудь
библиотеку языка PHP напишут не на C, а на самом PHP.
Свойства
Во всех объектно-ориентированных языках программирования имеются, так
называемые, "умные поля" - свойства. В PHP есть возможности для косвенной
реализации полей при помощи методов __set и __get:
class Foo
{
private $a = '';
function __set($Name, $Value)
{
if ($Name == 'A')
$this->a = $Value;
}
function __get($Name)
{
if ($Name == 'A')
return $this->a;
else
return '';
}
}
$Object = new Foo();
$Object->A = 'Hello, world!';
echo $Object->A;
Методы __set и __get вызываются при обращении к полю класса, которого не
существует. Это обращение можно перехватить и подставить нужное поле.
Псевдо-недостатки
Есть вещи, которые некоторые относят к недостаткам, но именно они и являются
достоинствами, которые надо сохранить в следующих версиях.
$this->...
Для обращения к любому члену класса необходимо использовать конструкцию
"$this->". Это поначалу ставит новичков в тупик, и раздаются крики "кто это
придумал!?", "почему программа не работает", особенно, если на отлов ошибки
уходит довольно много времени. Признаюсь, я был одним из таких кричащих. По
собственному опыту скажу, как этого избежать: в файле php.ini нужно прописать
следующую строку:
error_reporting = E_ALL|E_STRICT
Теперь при попытке использовать любую необъявленную переменную вам будет
выдано предупреждение.
global
Использование глобальных переменных в функциях из той же оперы, что и
предыдущий псевдо-недостаток. В идеальном мире функция не должна обращаться к
глобальным переменным (которых также не должно быть), а реальности, если уж
приходится это делать, то это надо четко указывать с помощью директивы
global.
Заключение
Очень бы хотелось, чтобы пятая версия была не последний, а вышла бы шестая и
седьмая версии с гордым рекурсивным именем.