РНР

РНР
PHP
Семантика:

мультипарадигменный

Тип исполнения:

Интерпретатор компилирующего типа

Появился в:

1995 г.

Автор(ы):

Расмус Лердорф

Последняя версия:

4.4.9 / 5.2.9

Тестовая версия:

5.3.0 RC2

Типизация данных:

динамическая

Испытал влияние:

C, англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста», англ. Personal Home Page Tools[1] (устар.) — «Инструменты для создания персональных веб-страниц») — язык программирования, созданный для генерирования веб-сервере и работы с базами данных. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров. Входит в веб-сайтов (Apache, Python или PEAR или документация языка.[2]

Содержание

Использование PHP

В области программирования для Сети, PHP — один из популярнейших скриптовых языков (наряду с Perl и языками, используемыми в «расширений»: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата Apache или IIS), либо в качестве операционных системах GNU/Linux, Microsoft Windows, Mac OS X и Perl, VBScript.

В настоящее время PHP используется сотнями тысяч разработчиков. Порядка 20 миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета[3].

История

Название PHP — рекурсивная аббревиатура, означающая «PHP: Hypertext Preprocessor» (ранее акроним расшифровывался как «Personal Home Page Tools»). Изначально PHP создавался в качестве надстройки над Perl для облегчения разработки веб-страниц.

PHP/FI

В 1994 году датский программист (ныне живущий в Канаде) Расмус Лердорф (Rasmus Lerdorf) написал набор скриптов на онлайн-резюме, обрабатывающий шаблоны Personal Home Page (Личная Домашняя Страница). Вскоре функциональности и быстроты Perl — интерпретатора скриптов — перестало хватать, и Лердорф написал на языке C новый интерпретатор шаблонов PHP/FI (англ. Personal Home Page / Forms Interpreter — «Личная Домашняя Страница / Интерпретатор форм»). PHP/FI включал базовую функциональность сегодняшнего PHP: оформление переменных в стиле Perl ($имя_переменной для вывода значения), автоматическую обработку форм и встраиваемость в HTML-текст и многое другое. Новорожденный язык отличался от своего прародителя более простым и ограниченным синтаксисом.

В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C — PHP/FI 2.0. Её использовали около 1 % (приблизительно 50 тысяч) всех интернет-доменов мира.

PHP 3

PHP 3.0 была первой версией, напоминающей PHP, каким мы знаем его сегодня. В 1997 году два израильских программиста, Энди Гутманс (Andi Gutmans) и Зээв Сураски (Zeev Suraski), разработчики из израильского технологического института, расположенного в Хайфе, Израиль, переписали код с нуля: PHP/FI 2.0 был сочтён ими непригодным для разработки приложения электронной коммерции, над которым они в то время работали. Для совместной работы над PHP 3.0 с помощью базы разработчиков PHP/FI 2.0 Энди, Расмус и Зив решили объединиться и объявить PHP 3.0 официальным преемником PHP/FI, разработка же PHP/FI была практически полностью прекращена.

Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра. Впоследствии интерфейс написания расширений привлёк к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Фактически, это и был главный ключ к успеху, но стоит добавить, что немаловажным шагом оказалась разработка нового, намного более мощного и полного синтаксиса с поддержкой ООП.

Абсолютно новый язык программирования получил новое имя. Разработчики отказались от дополнения о персональном использовании, которое имелось в аббревиатуре PHP/FI. Язык был назван просто PHP.

К концу 1998 года PHP использовался десятками тысяч пользователей. Сотни тысяч веб-сайтов сообщали о том, что они работают с использованием этого языка. В то время PHP 3.0 был установлен приблизительно на 10 % веб-серверов Интернета.

PHP 3.0 был официально выпущен в июне 1998 года после 9 месяцев публичного тестирования.

PHP 4

К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зив Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Расширения дали PHP 3.0 возможность успешно работать с набором баз данных и поддерживать большое количество различных API и протоколов, но PHP 3.0 не имел качественной поддержки модулей и приложения работали неэффективно.

Новый движок, названный Zend Engine (от имён создателей, Зива и Энди, также основателей Zend Technologies), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника PHP 3.0. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

Прекращение выпуска обновлений PHP 4 было запланировано на конец 2007 года[4]. Однако вплоть до 8 августа 2008 года выпускались критические обновления безопасности. С 9 августа 2008 года всякая поддержка версии PHP 4.x была прекращена.

PHP 5

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки ООП, которые стали во многом схожи с моделью, используемой в деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. Нововведения, однако, были сделаны с расчётом сохранить наибольшую совместимость с кодом на предыдущих версиях языка. На данный момент стабильной и наиболее популярной является версии PHP 5.xx[5].

1 августа 2008 года анонсирована первая альфа-версия PHP 5.3.0, которая содержит ряд изменений и дополнений:

  • Пространство имен
  • Позднее статическое связывание и специальный метод __callStatic()
  • Анонимные функции
  • Addition of the intl, phar (phar is scheduled for some more work a head of alpha2), fileinfo and sqlite3 extensions
  • Optional cyclic garbage collection
  • Optional support for the MySQLnd replacement driver for libmysql
  • Отмена поддержки версий операционной системы до Windows 2000 (Windows 98, NT4, и.т.д.)
  • Новые синтаксические конструкции, такие как NOWDOC, ограниченный GOTO, короткий вид тернарного оператора «?:»

PHP 6

Шестая версия PHP находится в стадии[6] разработки с октября 2006 года. В ней уже сделано[7][8] множество нововведений, как, например, исключение из ядра регулярных выражений safe_mode, php_magic_quotes и register_globals из конфигурационного файла php.ini. Также много внимания уделено поддержке Юникода.[9]. Загрузить текущую версию разрабатываемого кода для BSD и скомпилированные версии для Microsoft Windows можно на сайте PHP Snapshots.

Синтаксис

Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из

Простейшая программа Hello world на PHP выглядит следующим образом:

<?php
  echo 'Hello, world!'; 
?>

PHP исполняет код, находящийся внутри ограничителей, таких как <?php ?>. Всё, что находится вне ограничителей, выводится без изменений. В основном, это используется для вставки PHP-кода в HTML-документ, например так:

<html>
 <head>
  <title>Тестируем PHP</title>
 </head>
 <body>
  <?php echo 'Hello, world!'; ?>
 </body>
</html>

Помимо ограничителей <?php ?>, допускается использование дополнительных вариантов, таких как <? ?> и <script language="php"> </script>. Кроме того, до версии 6.0 допускается использование ограничителей языка программирования ASP <% %> (конструкции <? ?> и <% %> могут быть выключены в конфигурационном файле php.ini).

Имена переменных начинаются с символа $, тип переменной объявлять не нужно. В отличие от имён функций и классов, имена переменных чувствительны к регистру. Переменные обрабатываются в строках, заключённых в апострофы или двойные кавычки, и heredoc-строках (строках, созданных при помощи оператора <<<).

PHP рассматривает переход на новую строку как пробел, так же как HTML и другие языки со свободным форматом. Инструкции разделяются с помощью точки с запятой (;), за исключением некоторых случаев.

PHP поддерживает три типа комментариев: в стиле языка Си (ограниченные /* */), C++ (начинающиеся с // и идущие до конца строки) и оболочки UNIX# до конца строки).

Типы данных

PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных, равно как и самого объявления переменных. Преобразования между скалярными типами зачастую осуществляются неявно без дополнительных усилий (впрочем, PHP предоставляет широкие возможности и для явного преобразования типов).

К скалярным типам данных относятся:

К нескалярным типам относятся:

Диапазон целых чисел (integer) в PHP зависит от платформы (обычно это диапазон 32-битных знаковых целых чисел, то есть от −2 147 483 648 до 2 147 483 647). Числа можно задавать в десятичной, восьмеричной и шестнадцатеричной системах счисления. Диапазон вещественных чисел (double) также зависит от платформы (для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.7×10-308 до ±1.7×10+308).

PHP предоставляет разработчикам логический тип (boolean), способный принимать только два значения TRUE («истина») и FALSE («ложь»). При преобразовании в логический тип число 0, пустая строка, ноль в пустой строке «0», NULL и пустой массив считаются FALSE. Все остальные значения автоматически преобразуются в TRUE.

Специальный тип NULL предназначен для переменных без определённого значения. Единственным значением данного типа является константа NULL. Тип NULL принимают неинициализированные переменные, переменные инициализированные константой NULL, а также переменные, удалённые при помощи конструкции unset().

Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.

Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется.

Обращение к переменным и функциям

Обращение к переменным осуществляется с помощью символа $, за которым следует имя переменной. Данная конструкция может быть применена также для создания динамических переменных и функций.[10] Например:

$a = 'I am a';    // Запись значение в переменную $a
echo $a;          // Вывод переменной $а
 
$b = 'a';
echo $$b;         // Вывод переменной $а
 
$c = 'function_name';
$c();             // Вызов функции function_name
 
$d = 'Class_name';
$obj = new $d();  // Создастся объект класса Class_name
 
$obj->b;         // Обращение к полю b объекта
$obj->c();       // Вызов метода c() объекта
 
// но:
 
$obj->$b;         // Обращение к полю a объекта, т.к. $b = 'a'
$obj->$c();       // Вызов метода function_name() объекта

Суперглобальные массивы

Суперглобальными массивами (англ. Superglobal arrays) в PHP называются предопределённые массивы. Большая часть этих массивов содержит входные данные запроса пользователя (параметры POST, куки и т. п.).

Все суперглобальные массивы кроме $GLOBALS и $_REQUEST имеют устаревшие аналоги с длинными именами, которые доступны вплоть до пятой версии PHP (в шестой версии планируется их исключение). Таким образом, обращения $_GET['year'] и $HTTP_GET_VARS['year'] идентичны.

$GLOBALS
Массив всех глобальных переменных (в том числе и пользовательских).
$_SERVER (устаревший аналог — $HTTP_SERVER_VARS)
Содержит переменные окружения, которые операционная система передает серверу.
$_ENV (уст. $HTTP_ENV_VARS)
Текущие переменные среды (англ. Environment variables). Их набор специфичен для платформы, на которой выполняется скрипт.
$_GET (уст. $HTTP_GET_VARS)
Содержит параметры GET-запроса, переданные в URI после знака вопроса «?».
$_POST (уст. $HTTP_POST_VARS)
Ассоциативный массив значений полей HTML-формы при отправки методом POST. Индексы элементов соответствуют значению атрибута name элементов управления HTML-формы.
$_FILES (уст. $HTTP_POST_FILES)
Ассоциативный массив со сведениями об отправленных методом POST файлах. Каждый элемент имеет индекс идентичный значению атрибута «name» в форме и, в свою очередь, также является массивом со следующими элементами:
$_COOKIE (уст. $HTTP_COOKIE_VARS)
Ассоциативный массив с переданными агентом пользователя значениями куки.
$_REQUEST
Содержит элементы из массивов $_GET, $_POST, $_COOKIE. С версии PHP 4.1 включает $_FILES.
$_SESSION (уст. $HTTP_SESSION_VARS)
Содержит данные сессии.

Объектно-ориентированное программирование

PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.

Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает все три основных механизма ООП — инкапсуляцию, полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent.

Классы в PHP имеют ряд специальных методов (англ. Magic methods), начинающихся с двух символов подчёркивания. Особо стоит отметить конструктор (__construct(), в ранних версиях конструктором служил метод, одноименный с классом) и деструктор (__destruct()), а также методы чтения (__get()) и записи (__set()), свёртывания (__sleep()) и развёртывания (__wake()), клонирования (__clone()) и др. Эти методы являются достаточно гибким инструментом: переопределяя их, можно легко добиться существенного изменения поведения объекта.

Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием символов ->. Для доступа к членам класса из его методов используется переменная $this.

class C1 extends C2 implements I1, I2{
  private $a;
  protected $b;
 
  function __construct($a, $b){
    parent::__construct($a, $b);
    $this->a = $a;
    $this->b = $b;
  }
 
  public function plus(){
    return $a + $b;
  }
/* ...............  */
}
 
$d = new C1(1, 2);
echo $d->plus();

Критика

Несогласованный синтаксис функций и неортогональность

PHP предоставляет разработчикам большое количество самых разнообразных функций, которые попали в язык из расширений, создаваемых разными группами программистов. В результате синтаксис языка не согласован, например, часть функций для работы с массивами начинается с префикса array_, другая часть этим префиксом не обладает. Названия части строковых функций начинается с префикса str, другие функции таким префиксом не обладают. В тех же строковых функциях обрабатываемая строка может передаваться как в качестве первого, так и в качестве последнего аргумента, что требует постоянного обращения к документации. Многие задачи, например разбиение строки на массив или подстроки, решаются неимоверным количеством разнообразных наборов функций. Все это связано с сильным влиянием

Отсутствие обратной совместимости между версиями языка

Код, созданный для более ранних версий языка, зачастую не работает или работает некорректно с более поздними версиями языка. В более поздних версиях исключаются конструкции, методики, функции, применявшиеся ранее. В результате, приложения, созданные несколько лет назад, практически теряют работоспособность для современных версий языка и требуют значительной модификации. Такие изменения обусловлены двумя факторами: устранение несогласованного синтаксиса и устранение конструкций, поощряющих создание небезопасного кода. Справедливости ради, следует отметить, что отсутствие обратной совместимости вообще характерно для современных интерпретируемых языков.

Отсутствие поддержки Unicode в ядре языка

Поддержка Unicode-строк реализуется через расширение mbstring. При этом вместо стандартных функций работы со строками используются аналогичные функции, но с префиксом mb_. Сами строки не хранят информацию о своей кодировке, и её необходимо указывать вручную при вызове функций расширения mbstring. Проблема, скорее всего, будет решена в PHP 6.

Отсутствие многопоточности

В языке не предусмотрена возможность создания многопоточных приложений. Есть различные обходные решения с использованием [11] и сокетов.[12][13][14] Для pcntl_. Справедливости ради, следует отметить, что PHP распространен главным образом в области Web-разработки, где зачастую проблему многопоточности берет на себя веб-сервер.

Отсутствие прямого обращения к возвращаемому массиву

В языке PHP массив, возвращаемый функцией или методом, необходимо предварительно занести в переменную, чтобы применить оператор […]. Пример:

function odds($N)
{
    return range(0, $N, 2);
}
print odds(10)[2]; //ошибка
$tmp = odds(10); 
print $tmp[2]; // работает

Эта проблема, скорее всего, не будет решена, так как PHP, в отличие от других языков программирования, позволяет работать не только с индексными массивами, но и с ассоциативными. Однако PHP поддерживает конструкцию list(), предлагающую концептуально иной способ работы с массивами, предоставляя разработчику возможность поместить элементы массива сразу в переменные.

Пасхальные яйца

PHP имеет несколько пасхальных яиц (шуток).Передача специальных GET-параметров любому php-скрипту приводит к выводу различных изображений.

Введя в PHP4 следующее значение, можно увидеть авторскую фотографию (обычно фотография чёрного терьера).

любой_сценарий.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

Если же этот код передать в PHP 5, то появится несколько «корявый» логотип PHP.

Следующие два значения, позволят увидеть стандартный логотип PHP и ZEND, соответственно:

любой_сценарий.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
любой_сценарий.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42

Эти значения можно получить и непосредственно в PHP-скрипте с помощью функций php_logo_guid и zend_logo_guid для логотипа Zend.

Также имеется специальное значение для отображения списка всех авторов PHP (4,5):

любой_сценарий.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Популярные приложения

Интегрированные среды разработки для PHP

Название Лицензия Сайт
Eclipse PDT (PHP Development Tools) http://www.eclipse.org/pdt/
Zend Studio Shareware http://www.zend.com/products/zend_studio/
phpDesigner Shareware http://www.mpsoftware.eu/
PHP Expert Editor Shareware + бесплатно для лиц проживающих в СНГ http://www.phpexperteditor.com/
NetBeans IDE http://www.netbeans.org//
Delphi for PHP Trial http://www.codegear.com/products/delphi/php
NuSphere Trial http://www.nusphere.com/

Примечания

См. также

  • PEAR
  • PHP-инъекция
  • PHP-GTK
  • Акселератор PHP

Ссылки

Литература

  • Кузнецов Максим, Симдянов Игорь Объектно-ориентированное программирование на PHP. — Спб.: «БХВ-Петербург», 2007. — С. 608. — ISBN 978-5-9775-0142-2
  • Кристиан Уэнц PHP. Карманный справочник = PHP Phrasebook. — М.: «Вильямс», 2007. — С. 384. — ISBN 0-672-32817-8
  • Эд Леки-Томпсон, Алек Коув, Стивен Новицки, Хьяо Айде-Гудман PHP 5 для профессионалов = Professional PHP 5. — М.: «Диалектика», 2006. — С. 608. — ISBN 0-7645-7282-2
  • Кузнецов Максим, Симдянов Игорь Самоучитель PHP 5. — 2-е изд., перераб. и доп.. — Спб.: «БХВ-Петербург», 2006. — С. 608. — ISBN 5-94157-884-9
  • Кузнецов Максим, Симдянов Игорь, Голышев Сергей PHP 5. Практика создания Web-сайтов. — Спб.: «БХВ-Петербург», 2005. — С. 960. — ISBN 5-94157-552-1
  • Кузнецов Максим, Симдянов Игорь Головоломки на PHP для хакера. — Спб.: «БХВ-Петербург», 2006. — С. 464. — ISBN 5-94157-837-7
  • Кузнецов Максим, Симдянов Игорь, Голышев Сергей PHP 5 на примерах. — Спб.: «БХВ-Петербург», 2005. — С. 576. — ISBN 5-94157-670-6
  • Дмитрий Котеров, Алексей Костарев PHP. В подлиннике. — Спб.: «БХВ-Петербург», 2005. — С. 1120. — ISBN 5-94157-245-Х


Wikimedia Foundation. 2010.

Полезное


Смотреть что такое "РНР" в других словарях:

  • РНР — Радио «Новая Россия» http://novross.nasha.com/​ РФ, связь РНР Румынская Народная Республика Румыния РНР Ростнефтересурс ООО …   Словарь сокращений и аббревиатур

  • РНР — Румынская Народная Республика …   Словарь сокращений русского языка

  • ВЕЛИКОЕ НАЦИОНАЛЬНОЕ СОБРАНИЕ РУМЫНСКОЙ НАРОДНОЙ РЕСПУБЛИКИ — – высший орган государственной власти Румынской Народной Республики – государства народной демократии (см. Народно демократическое государство). В. н. с. является высшим представительным учреждением румынского народа, который под руководством… …   Советский юридический словарь

  • Константинеску-Яшь Петре — Константинеску Яшь (Constantinescu lasi) Петре (р. 25.11.1892), румынский историк и обществ, деятель, действительный член Румынской академии, член корреспондент Болгарской АН, почётный доктор исторических наук МГУ. Активный участник… …   Большая советская энциклопедия

  • Румыния — (România)         Социалистическая Республика Румыния, СРР (Republica Socialistă România).          I. Общие сведения          Р. социалистическое государство в южной части Европы, в основном в бассейне нижнего Дуная. На В. омывается Чёрным морем …   Большая советская энциклопедия

  • Константинеску-Яшь — (Constantinescu lasi)         Петре (р. 25.11.1892), румынский историк и обществ, деятель, действительный член Румынской академии, член корреспондент Болгарской АН, почётный доктор исторических наук МГУ. Активный участник революционного и… …   Большая советская энциклопедия

  • Георгиу-Деж Георге — Георгиу Деж (Gheorghiu Dej) Георге (8.11.1901, Бырлад, ≈ 19.3.1965, Бухарест), деятель румынского рабочего движения, государственный и политический деятель РНР. С 18 лет участвовал в рабочем движении. В 1930 вступил в Коммунистическую партию… …   Большая советская энциклопедия

  • Гроза Петру — Гроза (Groza) Петру (7.12.1884, Бэчия, уезд Хунедоара, ≈ 7.1.1958, Бухарест), румынский политический и государственный деятель, доктор права. Учился в Будапештском, Берлинском и Лейпцигском университетах. В 1921≈1922 и 1926≈27 министр. В 1927… …   Большая советская энциклопедия

  • Советско-румынские соглашения —         Дипломатические отношения с 9.6.1934. [Соглашение между РСФСР и королевской Румынией об эвакуации Румынией Бессарабии (5 9.3.1918) было сорвано румынским правительством, аннексировавшим Бессарабию.] 26 28.6.1940 было достигнуто соглашение …   Большая советская энциклопедия

  • Георгиу-Деж — I Георгиу Деж (Gheorghiu Dej)         Георге (8.11.1901, Бырлад, 19.3.1965, Бухарест), деятель румынского рабочего движения, государственный и политический деятель РНР. С 18 лет участвовал в рабочем движении. В 1930 вступил в Коммунистическую… …   Большая советская энциклопедия

Книги

Другие книги по запросу «РНР» >>


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»