Вступление Здравствуйте! С сегодняшнего дня мы начинаем серию публикаций о программировании на PHP. В этой статье мы дадим краткую вводную и посвятим вас в планы на будущее. Поскольку в интернете уже существует достаточное количество сайтов о PHP, публикующих материалы, рассчитанные на новичков, мы приняли решение в основном ориентироваться на людей, уже несколько разбирающихся в PHP-программировании. Это необходимо для того, чтобы понимать примеры кода, которые будут приводиться в дальнейшем.
Тем не менее, несмотря на предполагаемую подготовленность читателя, в первой статье мы дадим краткий обзор по PHP вообще - что он из себя представляет, какие задачи с его помощью следует решать, некоторые особенности синтаксиса, и т.п.
Что такое PHP?
PHP (его полное название: PHP: Hypertext Preprocessor) - это язык, предназначенный для быстрого создания динамических web-страниц. Синтаксис языка похож на С, Java и Perl, однако имеет и свои, присущие только ему особенности. В официальной документации PHP определяется как server-side HTML-embedded scripting language (встраиваемый в HTML скриптовый язык с обработкой на сервере). Из этого определения можно выделить два основных момента:
1. Обработка кода PHP производится на сервере, а не в браузере клиента, как, например JavaScript
2. Код PHP может быть встроен непосредственно в тело HTML страницы, что выгодно отличает его от Perl.
Ниже приведен пример PHP скрипта, взятый из фирменной документации по PHP, код PHP выделен синим цветом.
<html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html>
Из этого примера виден принцип встраивания кода PHP в HTML код страницы: все, что находится между начальным и конечным тегом PHP (<?php и ?> соответственно) считается PHP кодом и обрабатывается интерпретатором PHP.
Немного истории
Создателем PHP первоначально был Rasmus Lerdorf, но сейчас разработкой этого языка занимается довольно большое количество людей, поставивших своей задачей его дальнейшее расширение и развитие. За время своего существования (а первая версия PHP появилась в конце 1994 года) этот язык претерпел очень значительные изменения, коснувшиеся как внешней его структуры (синтаксиса, набора функций и т.п.), так и внутренней организации. Последний раз подобные глобальные изменения коснулись PHP с появлением 4-й версии этого языка, когда PHP был полностью переписан с использованием Zend scripting engine, разработанным компанией Zend technologies. Это позволило добавить в синтаксис языка ряд новых функций, а также сделать его существенно быстрее, чем предыдущие версии. Причиной, по которой удалось добиться таких результатов является то, что Zend scripting engine является наполовину компилятором, т.е. компилирует PHP код, а уж затем производит его выполнение, тогда как предыдущие версии PHP были по своей сути интерпретаторами. В наших публикациях мы в основном будем вести разговор именно о PHP версии 4. Кстати, на момент публикации этой статьи последняя официальная версия PHP имеет номер 4.0.6
Где взять PHP и информацию о нем?
Основной источник информации о PHP - это его официальный сайт: www.php.net. Только здесь можно всегда найти последние версии PHP, документацию для него на различных языках (к сожалению русского среди них нет), посмотреть список имеющихся на данный момент багов и т.п. Единственный недостаток этого замечательного ресурса является то, что он на английском языке :-) Но вам все равно придется иногда пользоваться им, даже если вы не знаете английского языка - хотя бы для того, чтобы скачать себе новую версию PHP :-)
Необходимо заметить, что PHP Manual, являющийся официальной документацией языка PHP - это именно тот документ, к которому следует обращаться при возникновении каких-либо вопросов. Очень хорошо, если вы будете иметь его у себя на локальном диске и скачивать новую версию документации вместе с каждой новой версией PHP. Только так можно чувствовать себя в всегда в курсе последних изменений в языке, которым вы пользуетесь.
Еще один замечательные ресурс, посвященный PHP - PHP Builder. Этот ресурс содержит просто море информации: статьи, форумы и т.п. Просто кладезь информации для любого, кто хочет узнать что-нибудь новое о PHP и... владеет английским языком :-) К сожалению русскоязычного ресурса подобного уровня пока нет (или мне не удалось его найти), поэтому приведу лишь пару ссылок на те ресурсы по PHP, которые содержат действительно полезную информацию:
* Клуб разработчиков PHP - содержит множество полезной информации о PHP, новости, статьи, ссылки и т.п.
* PHP по-русски - достаточно много различных статей о PHP, форумы, ссылки, и т.п.
Это то, что касается общей информации о PHP. В отсутствие дистрибутива PHP она не слишком полезна. Центром распространения дистрибутивов является официальный сайт. В разделе downloads вы всегда можете скачать последнюю официальную версию как в виде исходных текстов (а PHP распространяется именно в виде исходных текстов), что необходимо для пользователей Unix, так и в виде готового к использованию продукта для Windows. Там же можно скачать и несколько более ранних версий, хотя, как правило, это не нужно, т.к. официальные версии PHP (в отличие от версий для разработчиков) достаточно стабильны в работе. Кроме этого для пользователей Windows я хотел бы посоветовать еще один очень хороший ресурс, предоставляющий дистрибутивы PHP, собранные именно для этой операционной системы. Это www.php4win.de. Отличие этих дистрибутивов как правило в том, что они более полные, т.е. содержат большее количество расширений PHP в готовом для использования виде, т.к. дистрибутивы с официального сайта как правило содержат лишь основной набор расширений.
Кроме того не следует забывать, что работа над PHP продолжается постоянно, появляются новые возможности, функции, модули и т.п. А официальные версии языка между тем выходят лишь раз в несколько месяцев. Что делать, если очень хочется "пощупать" новую версию PHP еще до выхода официального релиза? Ответ один - скачать т.н. "девелоперскую" версию PHP. Эти версии собираются автоматически каждый день из самых последних версий исходных текстов PHP. Однако нельзя забывать, что для этих версий (в отличие от официального релиза) никто не может гарантировать вам даже то, что скачанный вами дистрибутив хотя бы будет запускаться, не говоря уже о том, чтобы нормально работать. Эти версии предназначены в первую очередь для разработчиков языка и бета-тестеров. Но если вам все равно интересно попробовать, то загляните сюда: snaps.php.net
Синтаксис PHP
Как уже было сказано ранее - синтаксис PHP во многом заимствован из таких языков как C, Java и Perl. Поэтому, если вы знакомы хотя бы с одним из них - вам не составит особого труда просто сесть и начать писать программы на PHP. Здесь мы не будем подробно останавливаться на описании синтаксиса - он хорошо описан в PHP Manual. Однако мне хотелось бы остановиться на некоторых аспектах, которые отличают PHP от других языков.
Имена переменных
Любая переменная в PHP имеет имя, начинающееся со знака $, например $variable. Людям, привыкших к C/C++-подобным языкам этот принцип именования переменных может показаться странным, но на самом деле такой подход имеет определенные преимущества.
1. При таком способе формирования имен переменных их очень легко отличить от остального кода. Если в других языках иногда может возникать путаница с тем, что при первом взгляде на код не всегда ясно - где здесь переменные, а где функции, то в PHP этот вопрос даже не встает.
2. Данный принцип позволяет очень просто и элегантно реализовать функциональность, просто недоступную иначе. Например, ссылка на переменную по ее имени, хранящемуся в другой переменной:
$name = 'value'; $value = 5; echo $$name;
В данном примере PHP выведет результат 5. Такие фокусы стали возможны из-за заложенного в PHP принципа: "anything is an expression" (любая вещь является выражением). Исходя из этого PHP воспринимает выражение $$name следующим образом:
* парсер встречает символ $, а это значит, что следующее выражение является именем переменной
* парсер встречает еще один символ $, и продолжает поиски имени уже другой переменной, значение которой необходимо для вычисления значения предыдущего выражения.
* парсер получает имя name, находит переменную с таким именем, берет ее значение ('value') и возвращается назад.
* поскольку на предыдущем шаге мы искали имя переменной, то значение только что вычисленного выражения воспринимается именно как имя переменной. Парсер ищет переменную с таким именем (value) и возвращает ее результат (5).
Как видите, это очень гибкая система и при небольшой тренировке вы сможете просто творить чудеса с ее помощью! Ведь точно так же можно оперировать с любыми элементами языка, имеющими имя, т.е. например вызывать метод класса по его имени, содержащемуся в переменной (о классах в PHP мы поговорим в одной из следующих публикаций).
Строки
Возможность однозначно идентифицировать переменную позволила создателям PHP дать возможность программистам использовать переменные непосредственно внутри строк! Пример подобного использования:
$name = 'John'; $age = 23; echo "$name is $age years old";
В качестве результата мы получим строку: John is 23 years old. Не правда ли, это исключительно удобно? Однако необходимо обратить ваше внимание на одну деталь - в PHP, в отличие от многих других языков, различаются строки, заключенные в одинарные и двойные кавычки. И подобное замещение имен переменных их значениями производится только в строках, заключенных в двойные кавычки! Очень важно всегда помнить об этом, дабы избежать ошибок.
Строки, заключенные в двойные кавычки могут содержать и более сложные выражения. Для этого необходимо заключить их в фигурные скобки:
$man = array('John',23); echo "{$man[0]} is {$man[1]} years old";
Результат будет таким же, как и в предыдущем примере.
Еще одной интересной особенностью работы PHP со строками является поддержка т.н. here docs. Ниже приведен пример:
$str = <<<TEXT There can be any text which will be stored into a string right in the same way as it typed here TEXT;
В этом случае значением переменной будет весь текст, содержащийся между начальным и конечным маркерами (в данном случае это строка TEXT, но этот маркер может быть любой последовательностью символов). Признаком того, что это here doc, является наличие <<< непосредственно после знака присваивания. Данный механизм очень удобен в случае, если строке необходимо присвоить какой-то сложный текст, особенно, если необходимо сохранить его форматирование. Кстати, в случае использования here docs вы также имеете возможность использования переменных внутри строки как это было описано ранее.
Массивы
Массивы в PHP - это очень мощный и гибкий механизм. Он позволит вам сделать практически все, что вы только можете пожелать сделать с массивами. Поддерживаются как обычные, так и ассоциативные массивы, причем они могут быть смешаны в любом порядке даже в пределах одного массива. Поддерживаются вложенные массивы, их вложенность никак явно не ограничена. В PHP существует большое количество функций для работы с массивами, они помогут вам выполнить большинство необходимых операций без лишних затрат времени и сил.
Кроме того, необходимо отметить еще одну особенность PHP при работе с массивами: в отличие от других языков PHP позволяет задавать массивы практически любой сложности непосредственно в теле программы! Возможно с первого взгляда эта возможность не покажется вам такой уж важной, однако это не так. В вашей практике вам не раз придется столкнуться с необходимостью описания какой-нибудь сложной структуры данных и наполнением этой структуры данными. В других языках для этого как правило приходится писать дополнительный код, что не всегда удобно. В PHP же вы можете сделать это очень просто и элегантно:
$data = array(1,10,100,1000, // Численные данные 'Some text','Another text', // Строковые данные 'name'=>'John','age'=>23, // Ассоциативные связи в массиве 'date'=>array('day'=>10,'month'=>'may','year'=>2001)); //Вложенный массив
Как видите - различные данные могут быть совмещены вместе в единой структуре без каких-либо проблем! Посмотрим, как можно обратиться к этим данным:
echo $data[1]; // Результат - 10 echo $data[5]; // Результат - 'Another text' echo $data['age']; // Результат - 23 echo $data['date']['month']; // Результат - 'may'
Большое количество информации и примеров, а также описания функций для обработки массивов можно найти в PHP Manual
Variable scope
Английский термин, вынесенный в заголовок переводится на русский как "область видимости переменной", но в оригинале этот термин намного понятнее :-)
Под этим термином подразумевается то, что любая переменная, описанная в программе имеет свою область видимости, другими словами если переменная описана в каком-то месте программы, то это отнюдь не означает, что она автоматически становится видимой в любом другом месте этой программы.
В PHP на этот счет есть свои особенности. Самая "странная" вещь, с которой сталкивается человек при знакомстве с PHP это то, что переменная, описанная вне функции невидима внутри нее! В других языках программирования мы привыкли к тому, что глобальные переменные программы видны везде, но в PHP это не так. Но посмотрев на эту "странность" повнимательнее можно заметить, что она имеет больше выгоды, нежели неудобств, т.к. является своего рода "защитным механизмом", который не позволит вам случайно перепутать локальную и глобальную переменную, что подчас приводит к очень тяжелым последствиям.
Как же получить доступ к глобальным переменным из функции? Есть 2 способа сделать это:
1. Использовать глобальный ассоциативный массив $GLOBALS. Это единственная переменная в PHP, которая видна отовсюду и которая "содержит" в себе все глобальные переменные, имеющиеся в программе. Т.о. если вы внутри функции обращаетесь к переменной $variable - то вы обращаетесь к локальной переменной, а если $GLOBALS['variable'] - то к глобальной.
function myFunction() { $variable = 5; // Присваиваем значение локальной переменной $GLOBALS['variable'] = 10; // Присваиваем значение глобальной переменной };
2. Использовать ключевое слово global. Оно позволит вам задать список глобальных переменных, которые будут видимы внутри функции:
function myFunction() { global $variable; $variable = 10; // Присваиваем значение глобальной переменной };
Что дальше?
На этом мы пока остановимся. Синтаксис PHP содержит множество интересных решений, здесь мы рассмотрели лишь некоторые из них. Возможно мы посвятим еще один выпуск рассказу о синтаксисе этого языка, а затем перейдем к более сложным и интересным вещам. Итак, что вас ожидает в дальнейшем?
* Работа с массивами
* Работа с объектами
* Работа со ссылками
* Работа с сессиями
* Обработка данных форм, upload файлов и т.п.
* Regular expressions
* Работа с базами данных
* Работа с XML/XSLT
* Что-то еще? Спрашивайте!
Конечно, материал не обязательно будет идти именно в такой последовательности, здесь многое зависит от вас и от вашей реакции на наши статьи. Если вы хотите узнать что-то, если у вас есть вопрос или проблема и вы не знаете ответа на них - пишите, спрашивайте, мы постараемся вам помочь!