PHP ( англ. PHP: Hypertext Preprocessor - PHP: гипертекстовый препроцессор ), прежнее название: Personal Home Page Tools - скриптовый язык программирования, был создан для генерации HTML -страниц на стороне веб-сервера. PHP является одним из самых распространенных языков, используемых в сфере веб-разработок (включая Java, . NET, Perl, Python, Ruby ). PHP поддерживается подавляющим большинством хостинг - провайдеров. PHP - проект открытого программного обеспечения.
PHP интерпретируется веб-сервером в HTML-код, который передается на сторону клиента.
В отличие от скриптового языка JavaScript, пользователь не видит PHP-кода, поскольку браузер получает готовый html-код. Это преимущество с точки зрения безопасности, но ухудшает интерактивность страниц. Но ничто не запрещает использовать РНР для генерирования и JavaScript -кодов выполняемых уже на стороне клиента.
Особенности PHP
PHP - язык, который может быть встроена непосредственно в html-код страниц, которые, в свою очередь корректно будут обработаны PHP-интерпретатором. Механизм РНР просто начинает выполнять код после первой экранирующей последовательности (<?) И продолжает выполнение до того момента, когда он встретит парную экранирующего последовательность (?>).
Большое разнообразие функций PHP дают возможность избежать написания многострочных пользовательских функций на C или Pascal.
- Наличие интерфейсов ко многим базам данных
- в PHP встроенные библиотеки для работы с MySQL, PostgreSQL, mSQL, Oracle, dbm, Hyperware, Informix, InterBase, Sybase.
- через стандарт открытого интерфейса связи с базами данных (Open Database Connectivity Standard - ODBC ) можно подключаться ко всем базам данных, к которым существует драйвер.
- Традиционность
Язык РНР покажется знакомой программистам, работающим в различных областях. Многие конструкции языка позаимствованы из С, Perl. Код РНР очень похож на тот, который встречается в типичных программах на С или Pascal. Это заметно снижает начальные усилия при изучении РНР. PHP - язык, сочетающий преимущества Perl и С и специально направлена на работу в Интернете, язык с универсальным и понятным синтаксисом. И хотя PHP является достаточно молодым языком, она приобрела такую популярность среди web-программистов, на данный момент является чуть ли не самым популярным языком для создания веб-приложений (скриптов).
- Наличие исходного кода и бесплатность
Стратегия Open Source, и распространение исходных текстов программ в массах, несомненно оказали благотворное влияние на многие проекты, в первую очередь - Linux хоть и успех проекта Apache сильно подкрепил позиции сторонников Open Source. Сказанное относится и к истории создания РНР, поскольку поддержка пользователей со всего мира оказалась очень важным фактором в развитии проекта РНР.
Принятие стратегии Open Source и бесплатное распространение исходных текстов РНР оказало неоценимую услугу пользователям. Дополнительно, пользователи РНР во всем мире является своего рода коллективным службой поддержки, и в популярных электронных конференциях можно найти ответы даже на самые сложные вопросы.
Эффективность является очень важным фактором при программировании для сред многопользовательских, к которым относится и web. Важным преимуществом PHP является то, что этот язык принадлежит к интерпретированных. Это позволяет обрабатывать сценарии с достаточно высокой скоростью. По некоторым оценкам, большинство PHP-сценариев (особенно не очень крупных размеров) обрабатываются быстрее аналогичных им программы, написанные на Perl. Однако, чтобы не делали разработчики PHP, исполняемые файлы, полученные с помощью компиляции, будут работать значительно быстрее - в десятки, а иногда и в сотни раз. Но производительность PHP вполне достаточна для создания вполне серьезных веб-приложений.
История PHP
Первые версии
История PHP начинается с 1995 года, когда Расмус Лердорф (Rasmus Lerdorf) создал простой приложение на языке Perl, что анализировал посещения пользователями его резюме на сайте.Затем, когда этим приложением уже пользовались несколько человек, а число желающих получить его постоянно увеличивалось, Лердорф назвал свое творение Personal Home Page Tools версия 1 и выставил для свободного скачивания. С этого момента начался небывалый взлет популярности PHP.
Как это всегда бывает, срочно потребовались доработки и новые дополнения. Для их реализации Расмус создает новую версию пакета, теперь уже написанную С. Полученный таким образом инструмент приобретает рабочего названия PHP / FI (Personal Home Page / Forms Interpreter - Персональная Домашняя страница / Интерпретатор Форм), в дальнейшем он также будет известен под названием PHP 2. Эта версия уже в большей степени похожа на сегодняшний PHP. Она имела синтаксис и способ именования переменных в стиле языка Perl, возможность встраивания PHP операторов в html-код страницы, автоматическую интерпретацию форм, интеграцию с базами данных. При этом все работало достаточно быстро, поскольку PHP прикомпилювалось к веб-серверу Apache. До 1997 года PHP использовался уже на 50,000 доменах (не более 1% всех веб-серверов).
В том же 1997 году в проект PHP подключились Зеев Сураски (Zeev Suraski) и Энди Гутманс (Andi Gutmans). Эти студенты Техниона, одного из израильских университетов, пытались использовать PHP / FI для одного из коммерческих университетских проектов. При этом им пришлось столкнуться со многими трудностями и ограничениями этой технологии. Изучая исходный код PHP 2, Зеев и Энди пришли к выводу о необходимости доработки, а точнее существенной переработки PHP, особенно в плане синтаксиса языка. В течение нескольких месяцев они блестяще справились с этой задачей.
Закончив работу Зеев и Энди договорились с Расмусом о сотрудничестве в области развития и совершенствования языка. С этого момента появляется PHP Group - группа единомышленников, работающих над развитием технологии PHP. Полученный продукт появился на свет в 1998 году под названием PHP 3.
При этом главной особенность PHP 3 была возможность расширения ядра, привлекло к работе над PHP множество сторонних разработчиков, создающих специализированные модули. Их наличие дала PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. К концу 1998 количество пользователей PHP перевалило за 100000, а PHP был уже установлен на не менее чем 10% серверах Интернета. В то же время широкому распространению данного языка способствовали публикации в электронной прессе и выход книг для изучения PHP.
Сразу же после выхода PHP 3, Энди Гутманс и Зеев Сураски начали переработку ядра PHP. В первую очередь предстояло решить проблему повышения производительности. Новый продукт, названный Zend Engine (от имен создателей: Zeev и Andi), успешно справлялся с поставленной задачей и был реализован в 1999 году. Основными реализованных идеями есть возможность компиляции сценария в исполняемый модуль, за счет чего производительность можно было поднять на порядок.
Признание и распространение PHP
PHP 4, работающий на этом ядре, вышел в 2000 году. Помимо увеличения производительности, PHP 4 имел новые возможности по поддержке сессий, буферизацию вывода, безопасные способы обработки вводимой информации пользователем, и новые языковые конструкции. С выходом 4 версии PHP стал использоваться уже на более чем 20% доменов Интернета.
За время с 2000 по 2004 год продолжались активные работы по улучшению 4 версии, но почти сразу PHP Group приступила к продумывание возможностей новой версии. В первую очередь было решено усилить объектные возможности языка, что позволяло использовать его для реализации масштабных проектов. Работы по созданию версии 5 велись продолжительное время, в них принимало участие рекордное количество специалистов, в частности Стерлинг Хьюз (Sterling Hughes) и Маркус Бергера (Marcus Boerger).
В июле 2004 года выходит официальный релиз PHP 5. В первую очередь, как и планировалось, было переработано весь механизм работы с объектами. И если в предыдущих версиях объектно-ориентированное программирование на PHP было возможно в минимальной степени, а потому и использовалось на практике не часто, то PHP 5 обладает великолепным потенциалом реализации объектного программирования. Кроме этого, PHP обогатился рядом ценных расширений для работы с XML, различными источниками данных, генерации графики и прочее.
Среди других крайне полезных дополнений в PHP 5 следует отметить новую схему обработки исключений. Конструкция try / catch / throw позволяет весь код обработки ошибок локализовать в одном месте сценария.
Все основные библиотеки для работы с XML, заимствованные в PHP 4, были подвергнуты серьезной переработке. Такие популярные расширения, как SAX, DOM и XSLT, теперь используют инструмент libxml2, что делает их еще более эффективными.
В PHP 5 также включены два новых модуля для работы с протоколами - SimpleXML и SOAP. SimpleXML позволяет значительно упростить работу с XML-данными, представляя содержимое XML-документа в виде PHP-объекта. Расширение SOAP позволяет строить на PHP сценарии, обменивающиеся информацией с другими приложениями с помощью XML -сообщений поверх существующих веб-протоколов, например HTTP. Модуль для работы с SOAP для PHP 5 предоставляет разработчикам средство для достаточно быстрого создания эффективных SOAP-клиентов и SOAP-серверов.
Новый модуль PHP 5 MySQLi (MySQL Improved) предназначено для работы с MySQL -сервером версий 4.1.2 и выше, реализуя не только процедурный, но и объектно-ориентированный интерфейс к MySQL. Дополнительные возможности этого модуля включают - SSL, контроль транзакций, поддержка репликации и пр.. Очевидно, что, на этом история PHP не заканчивается.Следует ожидать следующих версий языка с расширенными возможностями.
Синтаксис PHP
Отделение PHP кода от HTML разметки
Все сценарии оформляются в виде блоков кода. Эти блоки могут быть помещены в HTML-код, но отделены от него соответствующими ограничителями. Код PHP в HTML должен находиться между начальным тэгом <? php и конечным ?> (или между <script language="php"> и </ script> ) Желательным вариантом выделения PHP кода является вариант <? php?>, поскольку именно такие начальный и конечный теги позволят использовать PHP код в документах, которые соответствуют правилам XML. Также можно пользоваться сокращенной записью: <? ?>(иногда нужно активизировать данный стиль внеся вручную изменения в файл php.ini: переменная short_open_tag должна иметь значение On ) и записью в стиле ASP : <%%> (в php.ini переменная asp_tags должна иметь значение On ). Однако стиль ASP не рекомендуется и ожидается, что он будет отсутствовать в PHP6.
Простейшая программа Hello world на PHP выглядит так:
<? PHP Echo 'Hello, world!'; ?>
PHP выполняет код, находящийся внутри ограничителей, таких как <? php?>. Все, что находится за пределами ограничителей выводится без изменений. Таким образом выполняется вставка PHP кода в HTML код. Например, код html-страницы с предыдущим примером выглядеть так:
< html >
< head >
< title > Тестируем PHP < / title >
< / head >
< body >
<? php echo 'Hello, world!' ;?>
< / body >
< / html >
Отделение инструкций в PHP
Инструкции в PHP отделяются символом ;. Перед окончанием скрипта (перед тегом ?> ) точку с запятой ставить не обязательно.
Комментарии в PHP
Комментарии в PHP могут быть как однострочные так и многострочные. Однострочные комментарии начинаются с / / или # (комментарий скриптовых языков UNIX). Многострочные комментарии начинаются символами / * и заканчиваются * /. Следует отметить, что однострочные комментарии идут либо до конца текущей строки, или до завершающего тега ?>.
Переменные в PHP
Основой любого программирования является переменные. PHP, как и некоторые другие UNIX - скриптовые языки, не требует их описания. Существует три стиля оформления переменных в PHP:
- короткий стиль. Переменные записываются в виде: $ variable. Используется в большинстве случаев. Переменная, создается кодом, записывается следующим образом. Возможно также использование такого стиля для добывания переменной из ФОРМЫ, при включенной register_globals в файле конфигурации php.ini.
- средний стиль: $ _POST ['varaible'], $ _GET ['variable'], $ _REQUEST ['variable']. Используется для получения данных из полей ФОРМЫ. В зависимости от типа передачи данных, устанавливается POST или GET или REQUEST для обоих случаев.
- длинный стиль: $ HTTP_POST_VARS ['variable'], $ HTTP_GET_VARS ['variable']
Самый стиль записи, наименее используемый. Начиная с PHP 5.0.0 эти переменные можно отключить. Начиная с PHP 6 эти переменные недоступны.
Пример записи переменной с плавоючою точкой и строчной переменной: $ variable = 0.00; $ variable1 = 'hello PHP-Master!'; $ variable2 = "hello PHP-Coder!";
С точки зрения системы типизации, PHP является языком программирования с динамической типизацией [1]. Нет необходимости явного определения типа переменных, хотя такая возможность существует. В случае обращения к переменной, интерпретатор PHP трактует ее тип в соответствии с контекстом. При необходимости возможно приведение переменной к определенному типу с помощью соответствующих конструкций языка. Это может понадобиться, если учесть, что значение переменной могут трактоваться по-разному в зависимости от ее типа. Также возможно определение типа соответствующей переменной на определенном этапе выполнения сценария. Имена переменных чувствительны к регистру символов.
К базовым типам относятся булевы данные, цели и действительные числа с плавающей запятой, а также строки. Булевы данные выражают истинность значения. Целые числа могут быть представлены в восьмеричной, десятичной и шестнадцатеричном виде. Размер целого числа может изменяться платформы, как правило, разрядность составляет 32 бита. PHP не поддерживает беззнаковые целые. Действительные числа с плавающей запятой могут быть представлены в десятичной или экспоненциальное форме.
Работа со строками в PHP
Строки делят на два класса - строки, подлежащие анализу, и те, которые не подлежат. Первый класс исследуется интерпретатором на наличие ссылок на другие переменные, и при условии их наличия делается подстановка значений в соответствующее место. Кроме того, класс позволяет проводить манипуляции с руководящими символами. Символ строки может иметь только одно из 256 значений, но есть возможность работать с двухбайтовых символов. Доступ к символам строки возможен с использованием синтаксиса, похожего на доступ к элементаммассивов.
PHP предоставляет широкий спектр функций для поиска и замены текста в строках. Для этого используют как традиционный подход, так и специальный, основанный на использовании регулярных выражений. При этом в речи реализована поддержка двух видов регулярных выражений - Perl -совместимые и POSIX -совместимые, различающихся по синтаксисом и особенностями работы.
Смешанные типы данных в PHP
К смешанным типам относятся массивы, хеши и объекты. Массивы в смысле языка собой наборы переменных, которые сгруппированы в единую переменную. Требование однотипности наполнения массивов не ставится. Технически, массивы - это упорядоченные карты, отражающие ключевые значения на позиции переменных данных. Содержанием значение, на которое указывает ключ может быть чем-нибудь, что можно представить в виде переменной. Не существует никаких ограничений, кроме объема памяти, накладываемые на количество ключей массива.
Особенностью языка является отказ от равномерного распределения ключей массивов. Реализовано и модель многомерных массивов, причем без явного ограничения глубины вложенности. Полезным свойством PHP есть возможность ассоциации массивов с функцией обратного вызова. Эти функции позволяют производить действия над одним или несколькими массивами в пакетном режиме.
Также, существуют два специальных типа данных - ресурс и NULL. Ресурс - специальная переменная, содержащая ссылку на внешний ресурс. Ресурсы создаются и используются в специализированных функциях. Поскольку тип содержит специальные указатели на открытые файлы, соединения и прочее, то любые действия над значением ресурса не имеют смысла.
Область видимости переменной - среда, в которой она определена. Различают локальные и глобальные переменные. По умолчанию, все переменные имеют локальный характер действия.Выделяют особый тип переменных - статические, что позволяет повторное обращение к переменной в определенном сегменте кода, причем переменная будет хранить предварительно полученное значение. Существует также понятие суперглобальных переменных, которые являются местом хранения данных окружения или данных, полученных извне. Поддерживается концепция динамических переменных и функций.
Константы в PHP - идентификаторы простых значений. Возможно определение константы, причем после ее объявления становится невозможной изменение ее значения или аннулирования.Константы могут иметь только скалярные значения. Поддерживается возможность получения значения константы с динамическим именем. Область видимости констант будет глобальным для сценария и всех подключенных компонентов. Также в ядре языка определено немало системных констант.
Конструкции языка PHP
Операторы в смысле языка позволяют выполнять соответствующее действие над одним или несколькими операндами. Операторы бывают трех типов - унарные, бинарные и турнирных.Операторы, как и в других языках характеризуются не только действием, но и ассоциативностью и приоритетностью. Особенностью булевых операций сравнения - различения двух классов - с учетом типа и без учета типа, при котором происходит приведение в соответствующий типу. Округления происходят всегда в меньшую сторону. В языке реализованы особые классы операторов - исполнение, управление ошибками и проверки принадлежности к классу.
Функции в смысле языка являются контейнерами кода, причем возможно включение других функций и классов. На этом и базируется возможность условного определения функции. В этом случае выдвигается требование предварительной декларации вызванной функции, не обязательное в других случаях. Возможности переопределения или деактивации функции не существует. Результат, который возвращает функция может иметь любой тип.
В языке реализована функциональность ссылок. Возможно создать сколько угодно псевдонимов, ссылающиеся на единственный сегмент данных. При высвобождении любого из псевдонимов, сегмент данных остается в памяти до момента завершения сценария или высвобождение всех ссылок.
Что касается функций в PHP, то вместо принятого во многих языках принципа перегрузки функций, что позволяет изменить ход выполнения определенной функции в зависимости от типа и количества передаваемых параметров, используется метод динамических аргументов. Это позволяет не определять количество параметров для функций при их объявлении, а работать с теми аргументами, которые были получены на момент вызова функции. В теле функции можно получить количество переданных ей аргументов и проводить соответствующие манипуляции.При объявлении функции обычным образом, возможно задание значений аргументов по умолчанию. Функции могут возвращать только одно значение, однако это ограничение можно обойти, использовав не только массивы, но и ссылки. Передача аргументов по ссылке невозможна при исполнении и объявления функции.
После выполнения сценариев, пространство памяти, занимаемой ими очищается сборщиком мусора. Однако, при необходимости возможно выполнение очистки памяти от избыточных сегментов данных при выполнении скриптов. Использование функций очистки памяти является неоправданным, хотя такая возможность существует.
Для построения наборов можно использовать модульный подход, выполняя разделения разнородного кода. При необходимости, возможно выполнение подключения необходимых модулей, причем операция выполнения может быть и условным. Подключены к скрипту файлы могут возвращать значения.
Дополнительные возможности PHP
Речь явно поддерживает HTTP Cookies согласно спецификациям Netscape. Это позволяет производить установку и чтение небольших сегментов данных на стороне клиента.
PHP предоставляет возможность организации работы с пользователем в течение сеансов (сессий). В сессии можно хранить различные данные, включая объекты.
Недостатки PHP
- Неудобство дизайна языка
- Переменные с символом «$»
- Сложные названия распространенных функций (html_entities_decode, mysql_select_db, nl2br т.д.)
- Не поддерживается Unicode в версиях до 6.0
- Непредсказуемость новых версий PHP.
- Отсутствие единого драйвера для баз данных
Лицензия PHP
Лицензия PHP называется The PHP License version 3.0, никаких сведений по этой лицензии и ее текст можно найти на официальном сайте The PHP Group, а также файл с лицензией содержит дистрибутив PHP (обычно license.txt).