Выпуск 9. Основы PHP

Рубрика: WordPress -> Архив рассылки
Пятница, 4 августа 2006 г.
Просмотров: 2977
]]>
]]>

Сегодня мы начнем изучать основы PHP. Наша цель - научиться понимать его синтаксис, чтобы в дальнейшем без особого труда исправлять любые модули под себя.

Что такое PHP?

Если HTML - это язык разметки, с помощью которого мы только размечаем текст, то PHP - это уже полноценный язык программирования. С помощью PHP можно производить различные вычисления, работать с базами данных, файлами, строками и т.д. По функциональность PHP один из самых мощных языков.

PHP - это интерпретатор, то есть для выполнения его команд требуется только исходный текст (листинг) без предварительной компиляции в выполняемый код.

Как правило файлы, которые содержат PHP-инструкции имеют расширение .php. Сервер знает, что это исполняемый файл и он должен его выполнить.

Если совсем строго, то сервер будет выполнять файлы имеющие специальный атрибут "исполняемый". То есть в принципе вы можете заставить сервер исполнять и .txt, и .html, и любые другие расширения. Но, большинство серверов настроенны таким образом, что для расширения .php не требуется указывать этот атрибут.

Для того, чтобы выполнить PHP-код, недостаточно только указать расширение. Всё дело в том, что PHP создавался как некое "дополнение" к HTML. То есть вы можете совершенно безболезнено использовать в одном файле PHP и HTML. Если в файле .php не указана ни одной php-инструкции, то это файл будет обработан как обычный html-файл.

Определение php-кода

В файле любой php-код нужно заключать между <?php и ?>. Всё, что заключено в этой конструкции, будет воспринято как PHP. В тексте можно указывать любое количество таких "php-вхождений", например

  1.  html-текст
  2.  <?php
  3.  php-код
  4.  ?>
  5.  html-текст
  6.  <?php
  7.  php-код
  8.  ?>
  9.  html-текст
  10.  <?php
  11.  php-код
  12.  ?>

Если вы хотите сделать файл только как PHP, то проверьте, чтобы до <?php и после ?> не было никакого текста: ни пробелов, ни лишних абзацев - если они будут, то сервер их отобразит.

Это частая ошибка, которая в браузере может наблюдаеться как лишний абзац.

Вывод любого текста

Вывести любой текст на PHP можно с помощью функции echo или print:

  1.  echo "Текст для вывода";
  2.  print ("Текст для вывода");

Как правило используется вывод с помощью echo, поскольку это языковая конструкция и для её использования не требуется указывать скобки.

То есть, если вам нужно вывести средствами PHP любую строку, например html-код, то делается это с помощью echo.

Так же обратите внимание, что операторы в PHP разделяются точкой с запятой ";".

  1.  echo '<h1>Заголовок</h1>';
  2.  echo '<p>Основной текст</p>';

Если вы просто напишите html-код, то PHP выдаст ошибку.

  1.  <?php
  2.  <h1>Заголовок</h1>
  3.  ?>

Комментарии

Вы можете указывать комментарии в php-текстах. Для этого используется несколько конструкций:

  1.  # однострочный комментарий
  2.  /*
  3.  многострочный
  4.   комментарий
  5.  */
  6.  // еще один однострочный комментарий

Используйте любые по своему усмотрению.

Типы данных

PHP позволяет оперировать различными типами данных:

  • строки
  • числа целочисленные
  • числа дробные
  • массивы
  • логические (булевы: истина/ложь)
  • объекты

Можно явно задать тип данных, но, в большинстве случаев, PHP самостоятельно может произвести изменение типа данных.

Переменные

Все переменные в PHP задаются с помощью символа "$", например:

  1.  $a = 4; // переменной $a присваиваем значение 4 (число)
  2.  $b = "текст"; // переменой $b присваиваем значение "текст" (строка)
  3.  $c = 1.2; // $c присваиваем значение 1.2 (дробь)
  4.  $d = true; // $d присваиваем значение true (логическое истина)
  5.  $e = false; // $e присваиваем значение false (логическая ложь)
  6.  $f = array(); // создали пустой массив

Имена переменных не должны содержать пробелов. Желательно использовать английские имена, хотя в PHP можно их указывать и по-русски.

Кроме этого при использовании переменных нужно учитвать, что их имена регистрозависимы, то есть переменные $first и $First - разные.

Операции

После того, как вы указали переменные, вы можете производить над ними действия:

  1.  $a = 30;
  2.  $b = 6;
  3.  $result = $a + $b; # результат = 36
  4.  $result = $a - $b; # результат = 24
  5.  $result = $a * $b; # результат = 180
  6.  $result = $a / $b; # результат = 5
  7.  $result = $a % $b; # результат = 0 (остаток от деления)

Для того, чтобы объединить строки, нужно использовать . (точку):

  1.  $a = 'Привет, ';
  2.  $b = 'мир!';
  3.  $result = $a . $b; # результат = 'Привет, мир!'

Функции

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

  1.  // определяем функцию, суммирующую два числа
  2.  function sum($a, $b) {
  3.   return $a + $b;
  4.  }
  5.  // примеры использования
  6.  echo sum(4, 6); // выведет 10
  7.  $chislo1 = 20;
  8.  $chislo2 = 30;
  9.  echo sum($chislo1, $chislo2); // выведет 50

WordPress предоставляет в распоряяжение вебмастера большое количество предопределенных функций. Вы можете их использовать в своих шаблонах (собственно об этом мы и будем говорить в дальнейшем).

Константы

В PHP можно использовать константы:

  1.  define('DB_HOST', 'localhost'); # константа DB_HOST имеет значение 'localhost'
  2.  define('WPINC', 'wp-includes');
  3.  define('TEMPLATEPATH', get_template_directory());

Константы определяются только один раз и в дальнейшем не изменяются. Для того, чтобы их использовать не нужно указывать символ $:

  1.  echo DB_HOST;
  2.  echo WPINC;
  3.  echo TEMPLATEPATH;

Кроме этого константы регистронезависимы.

Условия

Иногда нужно выполнять какое-либо действие по определенному условию. Например, мы хотим на сайте для конкретной рубрики выводить разный текст приветствия. Для этого мы будем использовать встроенную функцию WordPress /-in_category(номер категории)-/.

  1.  if (in_category(1)) echo '<h1>Это первая категория!</h1>';
  2.  if (in_category(2)) echo '<h1>Это вторая категория!</h1>';
  3.  if (in_category(3)) echo '<h1>Это третья категория!</h1>';

Функция in_category() возвращает true (истина) в случае, если текущая запись принадлежит указанной категории. В этом случае условие if "срабатывает" и выполняется оператор echo.

Если же условие не срабатывает, то ничего не происходит и выполнение скрипта передается следующему оператору за этим условием.

Если вам нужно указать несколько действий в условии, то нужно использовать другой синтаксис (тот, что я привел выше - упрощенный, альтернативный).

  1.  if (in_category(1)) {
  2.   echo '<h1>Это первая категория!</h1>';
  3.   echo '<h2>Короткое описание!</h2>';
  4.  };

То есть добавляются фигурные скобки, которые определяют выполняемый блок. (Такие же скобки используются и в описании функции, циклов и т.д.)

В if можно использовать условие "иначе" (else).

  1.  if (in_category(1)) {
  2.   echo '<h1>Это первая категория!</h1>';
  3.   }
  4.   else {
  5.   echo '<h1>Это остальные категории!</h1>';
  6.   };

То есть в случае, если страница не принадлежит рубрике 1, будет выполнен блок else.

Цикл while

Когда нужно последовательно выполнять команды, то используется цикл. Наиболее простой - while.

  1.  $i = 1;
  2.  while ($i<10) {
  3.   echo $i;
  4.   $i++;
  5.  }

Описание. Вначале мы определили переменную $i, которой присвоили значение 1. После этого выполнение переходит к циклу, который будет выполняться пока условие истино, в нашем случае, пока $i<10.

В теле цикла происходит вывод (echo) значения, а после выполняется операция увеличения $i на единицу ($i++) (инкремент). То есть во время следующей итерации, $i уже будет равно 2, 3 и т.д.

Для цикла while также cуществует короткая запись:

  1.  $i = 1;
  2.  while ($i<10) : echo $i++;

или так:

  1.  $i = 1;
  2.  while ($i<10) :
  3.   echo $i;
  4.   $i++;
  5.  endwhile;

Если вы откроете файл index.php из шаблона default, то увидите, что цикл while используется для вывода записей.

Также обратите внимание, что этот цикл заключен в условие:

  1.  <?php if (have_posts()) : ?> <-- условие
  2.   <?php while (have_posts()) : the_post(); ?> <-- цикл
  3.   <-- тело цикла -->
  4.   <?php endwhile; ?> <-- конец цикла
  5.  <?php else : ?> <-- "иначе" в условии
  6.  <-- выполнение условия "иначе" -->
  7.  <?php endif; ?> <-- конец условия

Break и continue в циклах

Если нужно принудительно прервать выполнение цикла, например по какому-либо условию, то сделать это можно с помощью оперетора break.

Если же, наоборот, нет необходимости продолжать выполнение операторов в цикле ниже, то можно принудительно заставить цикл перейти к следующей итерации. Далается это с помощью оператора continue.

Другие типы циклов

В PHP сущестуют еще циклы

  • for ("выражение начальное"; "условие при котором выполняется цикл"; "выражение, выполняемое при каждой итерации") { тело цикла }
  • foreach ($массив as $значение_элемента) { тело цикла }
  • do { тело цикла } while ("условие при котором выполняется цикл")

Включение файлов

Для того, чтобы подключить к вашему php-скрипту другой php-файл используется директивы include, require, include_once, require_once:

  1.  include('file1.php');
  2.  require('file2.php');
  3.  include_once('file3.php');
  4.  require_once('file4.php');

Разница c ..._once в том, что включение файла происходит только одни раз. То есть, при повторном выполнении, файл добавлен не будет. Это бывает полезно в многомодульной системе, такой как WordPress.

Все переменные, константы, функции и т.д. из включаемого файла становятся доступны исполняемому.

Подавление вывода

Иногда бывают ситуации, когда нужно принудительно запретить вывод в браузер. Это бывает в случаях, когда некая функция может вернуть ошибку и php-выведет ее описание. Чтобы этого не произошло, нужно перед используемой функцией поставить символ @.

Далее...

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

Пример. Определение браузера

Поскольку в Инете, к огромному сожалению, все еще преобладает браузер M$ IE, то волей-неволей вебмастер должен учитывать его "особенности". Чаще всего это делается с помощью, т.н. хаков в css-файле. Однако, можно просто сделать отдельный css-файл под каждый браузер. Вот рабочий пример (строчки я пронумеровал для удобства):

  1.  <?php
  2.  [ 1] $user_agent = $_SERVER['HTTP_USER_AGENT'];
  3.  [ 2] $browser = 'style.css'; // css-файл по-умолчанию
  4.  [ 3] if (stristr($user_agent, 'Opera')) {
  5.  [ 4] $browser = 'opera.css';
  6.   }
  7.  [ 5] else {
  8.  [ 6] if (stristr($user_agent, 'Firefox')) {
  9.  [ 7] $browser = 'firefox.css';
  10.   }
  11.  [ 8] else {
  12.  [ 9] if (stristr($user_agent, 'MSIE 6.0')) {
  13.  [10] $browser = 'msie60.css';
  14.   }
  15.  [11] else {
  16.  [12] if (stristr($user_agent, 'MSIE 5.0')) {
  17.  [13] $browser = 'msie50.css';
  18.   };
  19.   }
  20.   }
  21.   }
  22.  [14] $browser = get_bloginfo('template_url') . '/' . $browser;
  23.  [15] echo '<link rel="stylesheet" href="' .
  24.   $browser .
  25.   '" type="text/css" media="screen">';
  26.  ?>

Разберем этот пример.

Первой строчкой мы получаем значение HTTP_USER_AGENT, в котором содержится имя используемого браузера.

Второй срочкой определяем имя css-файла по-умолчанию (в случае, если не сможем определить браузер).

Далее с помощью функции stristr() определяем есть ли вхождение подстроки 'Opera' в строку $user_agent. Если есть, то есть функция возвращает true - переопределяем переменную $browser на нужный нам файл. Если же условие не выполняется, то срабатывает "иначе" (else) и проверяются другие вхождения.

В 14 строке к переменной $browser дописывается адрес (url) текущего шаблона - функция WordPress get_bloginfo() как раз и возвращает нужную нам строку.

Последняя строчка формирует HTML-код, которая и выводится в браузере.

Вставлять этот код (номера строк не забудьте убрать!) нужно в файле, в котором подключается css-файл, обычно это header.php:

  1.  <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>"
  2.  type="text/css" media="screen">

то есть вместо этой строчки.

]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Комментариев: 1

Вы можете оформить подписку на все комментарии сайта. Или даже на все новые записи сайта. Не знаете, как это сделать?
  1. 2009-06-03 в 22:44:42 | Alex Weber

    IE уже не популярен smile по статистике 62% браузеров FF, 12% Chrome остальные... Ну как получится.

    А за статью спасибо, хоть мне не помогла, но почитал с удовольствием.