Взгляд в будущее (PHP)

Автор статьи: нет ©
Сайт Автора: нет
E-mail Автора: нет
Дата публикации: 27.06.2006

Введение

Данная статья, прежде всего, предназначена для программистов на 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.

Заключение

Очень бы хотелось, чтобы пятая версия была не последний, а вышла бы шестая и седьмая версии с гордым рекурсивным именем.