Весь WordPress написан на PHP. Поэтому для того, чтобы создавать или редактировать темы, или писать плагины, вам нужно знать некоторые вещи.
На моем блоге также есть пост про использование MySQL в WordPress — о том, как правильно создавать запросы, используя предназначенный для этого класс $wpdb.
Это немного дополненный старый пост, поэтому тут уже сотня комментов 🙂
Конечно, очень наивно полагать, что возможно охватить все основы PHP в одной статье, но я очень постараюсь.
Одна простая истина. Или даже две.
Вам ничего не стоит создать у себя на рабочем столе текстовый файл, назвать его file.html
и начать фигачить туда HTML код страницы. И у вас всё получится, в браузере всё откроется, но вот только если там будет содержаться PHP-код, то он не выполнится! JavaScript выполнится, вы уже знаете, а вот PHP нет.
Есть такая вещь, как локальный сервер Apache… Знаете? Прекрасно — можете использовать. Но мы сейчас идём по лайту и поэтому я скажу следующее — чтобы выполнить PHP код, вам нужно 1) зарегать хостинг 2) использовать PHP-код внутри файлов с расширением .php
.
Это была первая истина.
Вторая истина заключается в том, что сам код PHP должен находиться внутри <?php
и ?>
. Это как JavaScript находится между <script>
и </script>
. Вы даже можете использовать спокойно HTML внутри .php
-файлов, главное, чтобы сам исполняемый код был внутри этих скобок. Это вторая истина. Пример:
<h1><?php // здесь будет какой-то PHP код ?></h1>
О, так я и с комментариями вас познакомил! Когда строка начинается с //
, то всё, что идёт дальше этих символов на строке, кодом не воспринимается, то есть это просто пометки для самого кодера. Для вас!
Функции. Часть 1.
Всё основывается на функциях. Функция — эта такая штуковина, в которую мы можем передать какие-то значения (но не всегда) и она порадует нас каким-то результатом (но тоже не всегда).
Начнём с невероятно простых вещей. Создайте .php
-файл у вас на сервере и вставьте туда этот код:
<?php phpinfo() ?>
После этого откройте файл в браузере, например http://вашсайт/test.php
или же просто http://вашсайт
, если вы назвали свой файл index.php
(да, index.php
— этот тот файл, который открывается в папке (директории) по умолчанию, если в URL вы обращаетесь именно к папке, а не к файлу).
В общем, функция phpinfo()
просто выведет инфу о сервере. Понятную и не очень.
А что, если мы хотим продолжить в этом же файле, например в начале или в конце мы ещё выведем текущий год. Так вот, вторую функцию вы можете вставить с новой строки, а можете продолжать на этой же — главное лишь наличие точки с запятой между ними!
Очень прошу, сразу же пробуйте выполнять весь этот код у себя, иначе не будет никакого смысла.
<?php phpinfo(); // возьмите за привычку после любого действия в PHP-коде сразу ставить ";" echo date( 'Y' ); // параметр 'Y' как раз означает вывод года. ?>
Тут один момент — сама функция date()
не выводит дату, а только возвращает (сейчас вы узнаете, что это), а phpinfo()
сразу выводит. Поэтому перед функцией date()
мы ещё добавили echo
, что как раз означает вывод. Сейчас расскажу подробнее.
Числа, строки и…
Да, начнём с функции echo
(вы заметили, что она без скобочек? да, ей скобки не нужны). Выведем какое-то число:
echo 12345; // скобки <?php я не буду ставить в каждом коде для своего удобства :)
Всё просто, верно?
Для строк (это по сути текст) нам просто нужно обрамлять их в двойные или одинарные кавычки. Например:
echo 'Привет 123';
Тут так же хочу обратить ваше внимание, если внутри находятся ещё одни кавычки, то их нужно экранировать или использовать другие. Например, если нам нужно вывести It's a beautiful life.
, то можно сделать это двумя способами:
echo "It's a beautiful life.";
Или
echo 'It's a beautiful life.';
Используйте обратный слэш для того, чтобы символы не воспринимались именно как эти символы, а как обычный текст.
Переменные
Для тех, кто совсем-совсем начинающий, что такое переменные?
Как бы это объяснить, сейчас это слово подразумевается как какая-то ну совсем очевидная вещь. Начнём с того, что переменная, это какое-то слово (или набор символов — весь латинский алфавит, цифры, знак подчеркивания и… начинаться должно с символа алфавита и…вроде всё?). В PHP перед этим словом ещё ставится знак доллара, та-дам, всеми любимый из математики $x
. С единственным тем отличием, что в матеме во многих случаях нужно было найти его, и даже если его не нужно было находить, мы его всё равно не знали, тут же мы всегда примерно знаем его значение.
Теперь давайте предположим, что у нас есть какой-то кусочек контента, например кусок текста или офигенно сложное для запоминания число. И чтобы долго с ним не возиться, в один прекрасный момент мы записываем его в $x
, например вот так:
$x = 1234567890;
Знак равно это очень важная в программировании вещь (да-да, именно вещь — не собираюсь загружать вас терминами), которую мы назовем словом присваивание, то есть у нас был какой-то $x
(а может его и не было вовсе), затем мы взяли и присвоили ему значение 1234567890 и теперь $x
равен этому значению.
Теперь мы уже можем вывести не число, а именно переменную:
$x = 1234567890; echo $x;
И ещё один супер-пример. Предположим. Что нам нужно вывести число 7 раз! Не уверен, что такое понадобится, но предположим!
А теперь скажите, какой вариант кода вам нравится больше — первый или второй.
Это первый:
echo '1234567890'; echo '1234567890'; echo '1234567890'; echo '1234567890'; echo '1234567890'; echo '1234567890'; echo '1234567890';
Это второй:
$x = '1234567890'; echo $x; echo $x; echo $x; echo $x; echo $x; echo $x; echo $x;
Ну что? А если я скажу вам изменить это число, то где вы быстрее внесёте изменения — в первом куске кода или во втором?
Действия с переменными
Обычные действия: присвоение, сложение, умножение, деление, вычитание.
$privet='привет чуваки!'; $r = 1; $go = 4; $r = $r + $go; $r = 4 + $r / 5; $r = 2 * ($r - $go); $r++; // это означает $r=$r+1; $r--; // $r=$r-1;
Не забывайте в конце каждого действия в PHP ставить точку с запятой, иначе вылезет ошибка.
Объединение переменных:
$privet = 'привет'; $znak = '!' $result = $privet . ' чуваки' . $znak; // $result будет равно 'привет чуваки!' $result = $privet . $znak; // теперь $result будет равно 'привет!'
… и массивы
Смотрите, переменная может содержать число, может содержать строку (какой-то текст или символы), а может содержать массив, который является последовательностью из разных чисел, текста и чего угодно в общем-то, даже других массивов и более страшных вещей!
Например 1, 2, ‘текст’, 98 — это массив из четырех элементов, при этом отсчет начинается с нуля — нулевой элемент равен единице, первый — двойке, третий — строке текста и т.д.
Давайте зададим этот нехитрый массив в переменную:
$massivchik = array( 1, 2, 'текст', 98);
Что с ним делать-то теперь? На самом деле много чего, в документации PHP вы можете посмотреть функции, которые могут удалять элементы массива, сортировать их и т д, а мы же выведем из него второй элемент — двойку.
echo $massivchik[1]; // выведет 2 // если же хотите вывести абсолютно весь массив, то print_r( $massivchik );
Давайте добавим ему пятый элемент:
$massivchik[] = 'ну массив'; // array( 1, 2, 'текст', 98, 'ну массив');
Вы обратили внимание, что у каждого элемента массива есть свой числовой индекс? Запомните этот важный момент.
А теперь представляю вам ассоциативные массивы! Это когда помимо числового индекса, у элементов есть ещё и строковый индекс, ключ. Зададим массив.
$supermassive = array( 'chislo' => 1, 'text' => 'Privet', 'text2' => 19303 );
Думаю не нужно объяснять, что названия ключей должны быть уникальны. И небольшой пример вывода по ключу:
echo $supermassive['chislo']; // а может мы просто хотим присвоить элемент массива в отдельную переменную, тогда $y = $supermassive['chislo'];
А ещё мы можем изменить значение элемента:
$supermassive['chislo'] = 5; // точно так же кстати можно добавить и новый элемент
Ну всё, говорю же, старался покороче 🙂 Если есть вопросы — скидывайте в комментарии к посту.
Функции. Часть 2.
Как вы уже возможно поняли, функции в PHP выглядят следующим образом:
название_функции(параметры_через_запятую);
В PHP и в WordPress уже существует набор готовых функций, которые удобно использовать при создании блога. Также вы можете задавать и свои функции:
function название_функции( параметры_в_виде_переменных ){ выполняющийся код; }
Примеры:
Функция echo выводит на экран то, что указано в ней, иногда пишется со скобками, но я пишу без. Да, знаю, что уже упоминал её, но практики лишней не будет.
$privet = 'привет'; // для удобства зададим переменную echo 'привет'; // выведет привет echo $privet; // привет echo $privet . ' чуваки'; // привет чуваки echo '$privet чуваки'; // $privet чуваки echo "$privet чуваки"; // привет чуваки // видите разницу между двойными и одинарными кавычками? В одинарных кавычках переменные воспринимаются как текст, а в двойных как переменные.
Вот так всё это можно засунуть в HTML-код:
<h1><?php echo $privet ?></h1>
Зададим собственную функцию:
function privet(){ echo 'привет'; }
После того, как функция задана (в WordPress они все обычно задаются в файле functions.php в темах — для начала задавайте там, а потом разберетесь), её можно использовать в любой части сайта сколько угодно раз:
<h1><?php privet(); ?></h1><span><?php privet(); ?></span>
Теперь создадим функцию с параметрами:
function hello( $m, $n = 'значение по умолчанию' ){ // у переменных можно указать значения по умолчанию, тогда параметр становится необязателным echo $m . ' ' . $n; // кавычки здесь нужны, чтобы вывести пробел между словами } // пример выполнения $privet = 'привет'; $dude = 'чуваки!'; hello( $privet, $dude ); // после того, как начинает действовать функция, эти переменные превращаются в $m и $n в том же порядке, в котором указаны
Параметры $m, $n существуют только внутри функции, то есть под конец они уничтожаются, поэтому перед тем, как функция закончится, их надо либо вывести, либо сохранить их значения в других переменных. Для этого существует функция return
function hello( $m, $n ){ $m = $m . ' ' . $n; // как видите, так тоже можно изменять значение переменной return $m; }
Пример выполнения 1.
$privet = 'привет'; $dude = 'чуваки!'; $result = hello( $privet, $dude ); // $result будет присвоено значение $m echo $result;
Пример выполнения 2, результат будет одинаковый.
$privet = 'привет'; $dude = 'чуваки!'; echo hello( $privet, $dude );
Также существуют такие вещи как return true и return false — это логическое ДА и логическое НЕТ — они в основном нужны для условий, о них уже в следующей главе.
Условия:
if (условие) { // если действие только ОДНО, то { } скобки не обязательны действие; } elseif (условие) { // второе условие, в случае, если первое не выполняется действие; } else { // в случае если ни одно из условий выше не выполняется действие; }
Примеры:
if($x == 2) echo $x; // если $x равен 2 if($x != 2) echo $x; // если $x не равен 2 if($x < 2) echo $x; if($x > 2) echo $x; if($x <= 2) echo $x; // если $x меньше или равно 2 if($x >= 2) echo $x; // если $x больше или равно 2 if($x) echo $x; // если $x существует и не равен нулю if(isset($x)) echo $x; // если $x существует и возможно равен нулю if(!$x) echo $x; // если $x не существует, но возможно равен нулю if(!isset($x)) echo $x; // если $x не существует и не равен нулю
Несколько условий:
if($x==2 && $y < $x) echo $y; // если $x равен двум И (должны выполняться одновременно оба условия) $y меньше $x if($x==2 || $y < $x) echo $y; // если ИЛИ $x равен двум ИЛИ (получается должно выполняться хотя бы одно условие) $y меньше $x
Пример посложнее:
if(isset($result)) { if($result<5) { echo '$result = '.$result.'<br />'; echo 'значение переменной меньше 5'; } elseif ($result>5) { echo '$result = '.$result.'<br />'; echo 'значение переменной больше 5'; } else echo 'значение переменной равно 5'; } else echo '$result не существует';
Циклы
Есть несколько видов циклов, но нам пока будет достаточно самого распространённого:
while(условие){ // до тех пор пока условие выполняется, действие будет повторяться действие; }
Пример:
$result=0; while($result<5) { echo $result; $result++; } // в результате этот код выведет цифру 01234
Также добавлю, что когда у нас имеется какой-то массив и нам нужно прокрутить его через цикл, например вывести все его элементы, то это очень удобно сделать через цикл foreach()
.
$numbers = array( 1, 4, 7, 9 ); foreach ( $numbers as $number ) { // для каждого элемента массива // тут $number уже - конкретный элемент массива для конкретного итерации массива (повторения) echo $number; } // должно получиться просто 1479
Альтернативные записи условий и циклов
В WordPress всё это часто записывается в другом виде, но смысл остаётся тем же:
if(условия) : действия; elseif(условия) : действия; else : действия; endif; // конец условия
while(условия) : действия; endwhile; // конец цикла
Примеры на этот пункт вы найдёте практически в любой теме для WordPress.