20448

PHP

Доклад

Информатика, кибернетика и программирование

PHP: Hypertext Preprocessor PHP: препроцессор гипертекста англ. Область применения В области программирования для Сети PHP один из популярных скриптовых языков наряду с JSP Perl и языками используемыми в ASP.NET благодаря своей простоте скорости выполнения богатой функциональности кроссплатформенности и распространению исходных кодов на основе лицензии PHP.

Русский

2013-07-25

288.5 KB

5 чел.

22 PHP

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

Язык и его интерпретатор разрабатываются группой энтузиастов в рамках проекта с открытым кодом.[6] Проект распространяется под собственной лицензией, несовместимой с GNU GPL.

Область применения

В области программирования для Сети PHP — один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности, кроссплатформенности и распространению исходных кодов на основе лицензии PHP.

Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений[7]. Основные из них:

  •  автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;
  •  взаимодействие с большим количеством различных систем управления базами данных (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Интерфейс PDO);
  •  автоматизированная отправка HTTP-заголовков;
  •  работа с HTTP-авторизацией;
  •  работа с cookies и сессиями;
  •  работа с локальными и удалёнными файлами, сокетами.
  •  обработка файлов, загружаемых на сервер;
  •  работа с XForms;

В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования.[5] К крупнейшим сайтам, использующим PHP, относятся Facebook, ВКонтакте, Wikipedia и др.

Входит в LAMP — распространённый набор программного обеспечения для создания веб-сайтов (Linux, Apache, MySQL, PHP).

Создание GUI-приложений

Хотя PHP и не слишком распространён в данном качестве, его можно использовать и для создания GUI-приложений.

Для создания кроссплатформенных приложений служат пакеты PHP-GTK и PHP-Qt, представляющие собой обёртки для соответствующих популярных библиотек виджетов.

Скриншот редактора форм WinBinder

Для тех, кого интересует программирование с использованием Windows API существует две альтернативы. Во-первых это open source пакет WinBinder. Его ядро представляет собой написанное на C расширение php — php_winbinder.dll. В состав WinBinder включён также визуальный редактор форм, (см. скриншот) написанный с использованием самого WinBinder. Но, по сути, WinBinder является простой обёрткой к WinAPI и программирование с его использованием — достаточно низкоуровневое.

Скриншот среды программирования DevelStudio

Второй альтернативой является интегрированная среда Devel Studio, ориентированная, прежде всего, на начинающих программистов.

Различные части DevelStudio распространяются под различными лицензиями. Интерфейс к графическим и системным возможностям Windows представляет собой ряд модулей расширения PHP, и является проприетарным ПО, распространяемым в виде скомпилированных DLL на условиях freeware. (Авторы планируют также выпуск платной Pro версии DevelStudio, в которой набор таких, базовых, библиотек будет шире).

Поверх этих расширений существует написанная на PHP открытая библиотека компонентов, которая, вместе с IDE, также написанном на PHP, распространяется на условиях GPL. Вместе они образует среду визуального программирования с Delphi-подобной архитектурой. Программист может расширять DevelStudio собственными, написанными на PHP компонентами, которые, возможно, будут использовать функционал написанных им, или кем то другим, дополнительных бинарных расширений PHP. DevelStudio включает средства упаковки и установки таких пакетов.

Для работы DevelStudio приложений необходим также soulEngine.exe — мини-сервер, запускающий веб-приложения (использует php5ts.dll версии 5.2). Он также написан на PHP, и лицензируется на условиях BSDL.

Для программирования под Windows можно также использовать Phalanger — реализацию PHP для платформы .NET. Результатом компиляции PHP кода в Phalanger может быть любое .NET-приложение, будь то серверное ASP.NET или десктопное Windows Forms /Windows Presentation Foundation(WPF)

Синтаксис

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

Для работы программы не требуется описывать какие-либо переменные, используемые модули и т. п. Любая программа может начинаться непосредственно с оператора PHP.

Простейшая программа 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 и другие языки со свободным форматом. Инструкции разделяются с помощью точки с запятой (;), за исключением некоторых случаев, после объявления конструкции if/else и циклов.

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

Типы данных

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

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

  •  целый тип (integer),
  •  вещественный тип данных (float, double),
  •  логический тип (boolean),
  •  строковый тип (string),
  •  и специальный тип NULL.

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

  •  «ресурс» (resource),
  •  массив (array),
  •  объект (object),
  •  анонимная функция (closure) или псевдотип callback.

Диапазон целых чисел (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) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется. Не совсем корректно называть php-массивы массивами, на самом деле это, скорее всего, упорядоченный хеш. Возможно неожиданное поведение при использование цикла for со счетчиком вместо foreach. Так, например, сортируя массив с численными индексами функциями из стандартной библиотеки, сортируются и ключи тоже.

Указатель на функцию в PHP может быть представлен замыканием или типом callback. Замыкание доступно с версии 5.3 и в коде выглядит как простое определение функции, в которую явно можно утянуть значения из контекста, например:

 function($args..$argsN) use($ctxVar,$ctxVar1) { definition ; }

callback тип может быть представлен:

  •  строкой (интерпретируется как название функции);
  •  массивом где нулевой и первый элемент строки (интерпретируется как название статичной функции в классе);
  •  массивом где нулевой элемент объект, а первый строка (интерпретируется как метод у объекта).

Для проверки является ли значение вызываемым следует использовать is_callable($var)

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

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

$a = 'I am a';        // Запись значения в переменную $a

echo $a;              // Вывод переменной $а

 

$b = 'a';

echo $$b;             // Вывод переменной $а (дополнительный $ перед переменной $b)

 

echo ${'a'};      // Вывод переменной $a

 

function_name();      // Вызов функции function_name

$c = 'function_name';

$c();                 // Вызов функции function_name,

 

$d = 'Class_name';

$obj = new Class_name; // Создание объекта класса Class_name

$obj = new $d();      // Создание объекта класса Class_name

 

$obj->b;     // Обращение к полю b объекта

$obj->c();   // Вызов метода c() объекта

 

$obj->$b;    // Обращение к полю a объекта, так как $b = 'a'

$obj->$c();  // Вызов метода function_name() объекта, так как $c = 'function_name'

В PHP echo и print не являются функциями[13] (хотя print имеет возвращаемое значение), а являются синтаксическими единицами. При их использовании можно опустить скобки.

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

Суперглобальными массивами (англ. Superglobal arrays) в PHP называются предопределённые массивы, имеющие глобальную область видимости без использования директивы global. Большая часть этих массивов содержит входные данные запроса пользователя (параметры GET-запроса, поля форм при посылке методом 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» в форме, и, в свою очередь, также является массивом со следующими элементами:

  •  ['name'] — исходное имя файла на компьютере пользователя.
  •  ['type'] — указанный агентом пользователя MIME-тип файла. PHP не проверяет его, и поэтому нет никаких гарантий, что указанный тип соответствует действительности.
  •  ['size'] — размер файла в байтах.
  •  ['tmp_name'] — полный путь к файлу во временной папке. Файл необходимо переместить оттуда функцией move_uploaded_file. Загруженные файлы из временной папки PHP удаляет самостоятельно.
  •  ['error'] — код ошибки. Если файл удачно загрузился, то этот элемент будет равен 0 (UPLOAD_ERR_OK).

$_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(), в версиях до 5.0 конструктором служил метод, одноимённый с классом) и деструктор (__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 $this->a + $this->b;

 }

/* ...............  */

}

 

$d = new C1(1, 2);

echo $d->plus(); // 3

Начиная с пятой версии PHP, объекты передаются по ссылке:

class a

{

 public $color = 'red';

}

 

$a = new a();

echo $a -> color; // red

$b = $a;

$b -> color = 'blue';

echo $a -> color; // blue

«Paamayim Nekudotayim» или просто «двойное двоеточие». Используя эту лексему, программист может обращаться к константам, статическим или перегруженным свойствам или методам класса. При обращении к этим элементам извне класса, программист должен использовать имя этого класса. «Paamayim Nekudotayim» на первый взгляд может показаться странным словосочетанием для обозначения двойного двоеточия. Однако, во время создания Zend Engine версии 0.5 (который входил в PHP3), Andi и Zeev выбрали[14] именно это обозначение. «Paamayim Nekudotayim» действительно значит «двойное двоеточие» на иврите. Это обозначение не менялось ни разу в течение всего времени разработки PHP.[15]

<?php

class MyClass {

 const CONST_VALUE = 'Значение константы';

}

// Использование :: вне объявления класса

echo MyClass::CONST_VALUE;

?>

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

Название

Лицензия

Сайт

JetBrains PhpStorm

Trial

http://www.jetbrains.com/phpstorm/

PHP Development Tools

Eclipse Public License

http://www.eclipse.org/pdt/

Zend Studio

Shareware

http://www.zend.com/products/zend_studio/

Aptana Studio

GNU GPL

http://www.aptana.org

phpDesigner

Shareware

http://www.mpsoftware.eu/

PHP Expert Editor

Shareware[31]

http://www.phpexperteditor.com/

NetBeans IDE

CDDL

http://www.netbeans.org/

RadPHP XE

Trial

http://www.embarcadero.com/products/radphp/

NuSphere

Trial

http://www.nusphere.com/

KDevelop[32]

GNU GPL

http://www.kdevelop.org/

Критика

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

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

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

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

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

В новых версиях линейки 5.3.x большое количество функций было признано устаревшими, их поддержка не планируется в новых версиях языка[34], что вызывает несовместимость со скриптами, которые используют устаревшие функции. Также для версии 5.3 на данный момент отсутствует программное обеспечение Zend Optimizer. Однако разработчики планировали выпустить его в 2010 году [35]

Надо отметить, что противоречие между обратной совместимостью и процессом развития — одна из ключевых проблем в разработке программного и аппаратного обеспечения. При работе над скриптовыми языками время от времени происходит резкая смена его архитектуры (а порой и парадигмы), обычно сопровождающаяся сменной первой цифры в номере версии. Так, в настоящее время идёт постепенный переход на новую ветвь языка Python — 3.x, в стадии тестирования находится Perl 6, являющийся, по сути, новым perl-подобным языком. При этом принято выпускать переходные версии, в которых постепенно вводятся новые конструкции, а использование устаревших вызывает вывод предупреждений. К таким переходным версиям относится и PHP 5.3.

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

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

Разработчики сообщают что проблема будет решена в PHP 6[11].

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

В языке не предусмотрена возможность создания многопоточных приложений. Есть различные обходные решения с использованием curl[36] и сокетов.[37][38][39] Для POSIX-совместимых систем можно использовать функции с префиксом pcntl_. Справедливости ради, следует отметить, что PHP распространён главным образом в области Web-разработки, где зачастую проблему многопоточности берет на себя веб-сервер.


 

А также другие работы, которые могут Вас заинтересовать

55356. МІЙ КРАЙ – МОЯ ІСТОРІЯ ЖИВА 488.5 KB
  Дана робота містить методичні та учнівські матеріали з теми проекту. Цей творчий проект формує навички групової та колективної роботи, виховує в учнях полікультурні, загальнолюдські інності як основи формування громадянина–патріота Батьківщини.
55357. Перлини рідної мови 584 KB
  Мета: формувати соціальну компетентність; зацікавити учнів інформаційно-творчим проектом, навчати дітей збирати фольклорний матеріал, співпрацювати в групі, визначати коло обов’язків, привчати відповідально відноситися до своїх обов’язків...
55358. Наше здоров’я – в наших руках 710 KB
  Очікувані результати: учні навчаться збирати та аналізувати інформацію планувати свій час створювати буклети презентацію проекту набудуть навичок давати творчу оцінку результатам проектної діяльності та власним досягненням.
55359. Посвящается самому дорогому человеку 115.5 KB
  Потому что они ваши дети а вы – их любимые дорогие единственные и неповторимые мамы. Но сегодня ваши дети приготовили для вас особые подарки ваши девчонки и мальчишки будут дарить вам дорогие мамы свое творчество.
55361. Медіа-клуб 111 KB
  Мета проекту: формувати комунікативні та соціальні компетентності учнів виховувати активну життєву позицію школярів; допомагати у набутті молодим поколінням соціального досвіду...
55362. Народна казка як скарбниця духовних надбань людства у процесі адаптації п’ятикласників до навчання в середній школі 142.5 KB
  Гідним прикладом для згуртування нового учнівського колективу є дії, вчинки, кращі риси ментальності українського характеру – доброта, милосердя, взаєморозуміння, взаємодопомога – героїв народних казок, творів, які вивчаються саме в цей важливий адаптивний період.
55363. Наша школа + енергозбереження 67 KB
  Актуальність даного проекту полягає в тому що проблема сьогодення енергетика й енергозбереження є актуальною не лише для нашої школи а й для нашої країни загалом. В цьому переконалися наші учні приймаючи вже кілька років участь в Міжнародному конкурсі Енергія і середовище мета якого знайти нові шляхи енергозбереження в нашій країні.
55364. Володимир Сосюра – співець землі донецької 100 KB
  Мета проекту: дослідити, вивчити й узагальнити факти з життя В.Сосюри; ознайомитись із творчим доробком поета, тематикою його творів; на основі цих досліджень розробити урок літератури рідного краю