Вот решил написать небольшое пособие, по основам программирования на php с нуля, в помощь новичкам, для изучения азов программирования.
Как это относится к сео? Да очень даже прямо. Порой бывает нужно выполнить груду однотипной рутинной работы, и не большой скриптик мог бы очень помочь и сэкономить кучу времени. Я уже не говорю за то, что порой бывают, нужны более серьезные модули или программы, заказывать которые стоит порой не по карману. Но это уже более сложные задачи, которые тут мы рассматривать не будем. Если вы действительно заинтересуетесь, то в Интернет полно умных книжек, которые так и просятся чтоб их прочли) Здесь же мы рассмотрим только основы, помогающие вникнуть в суть и перейти к самостоятельному обучению более сложных этапов.
Речь пойдет о программировании на языке PHP.
Ну приступим…
Что же такое программирование? Чем оно отличается, например от языков разметки?
Разметка – это правила, применяемые к содержимому тега .
< a href="">текст</a>
Т.е. правила показывает браузеру, что содержимое тега <a> — ссылка. И оформлять и выводить пользователю её следует тоже как ссылку.
Языком разметки мы можем только применять какие любо правила, но не можем динамически изменять данные. Т.е. мы меняем только одежду, но сделать из человека обезьяну мы не можем.
Программирование же – это написание скриптов, или иначе сценариев. Сценариев по которым будут обрабатываться входящие данные (данные которые мы предоставим программе). Писать сценарии намного сложнее чем форматировать текст. Ведь для этого мало знать синтаксис языка, нужно самому этот сценарий спланировать и реализовать средствами языка.
Перед началом изучения, нам нужно обзавестись веб сервером, с установленным PHP интерпритатором. Интерпретатор – это программа, которая читает наш код и «переводит» его на машинный язык. В качестве сервера может быть хостинг. А лучше скачать и установить денвер, тот тот же хостинг только локальный (доступен только вашему компьютеру, или вашей локальной сети). Скачать можно тут http://www.denwer.ru/ там же почитать про установку и инструкцию по работе с ним.
Теперь перейдем к началу изучения PHP.
В php, как и в других языках все, так сказать, инструменты можно разделить на несколько групп:
Переменные – переменная это участок памяти, где хранится какая-либо информация. Переменная имеет имя, по которому к ней обращаются, что бы прочитать или изменить её содержимое. По самому названию «переменная» можно догадаться что данные в ней можно изменять в ходе выполнения программы. Переменные бывают разных типов: числовые, строковые, массивы и т.д. Чтобы показать интерпретатору что данный символ(ы) являются именем переменной используется знак доллара $.
$peremennaya –это переменная
peremennaya –а это просто бессмысленный набор символов
Переменные чувствительны к регистру (заглавным и строчным символам). Т.е. $a и $A совсем разные вещи. Тип переменной PHP определяет сам, поэтому во избежание путаницы не делайте действий с переменными разных типов. Например не прибавляйте число к массиву, ибо результат не предсказуем.
Константы – постоянные. Смысл тот же что и переменная, только константы нельзя изменять. Т.е. то что в них один раз записали, то там и будет. Этими данными можно только пользоваться.
Операторы – действия. Например: +, -, *, /, = и т.д. Полный список можно почитать справочник. Следует заметь что выражение:
$a = $b
Означает не то, что значение переменной «а» равно значению переменной «b». А то что значению переменной «a» присвоили значение «b». То есть если было:
- Код: Выделить всё
$a = 1;
$b = 2;
$a = $b;
То в итоге выполнения этой программы значение $a будет равно 2.
А для сравнивания есть другие операторы: == и ===
Так же есть операторы выполняющие определенные простейшие действия, например оператор вывода, цикла, условный оператор. Но тем не менее, на всех этих простейших действиях и построены все программы.
Оператор вывода: echo "" или echo», одинарные и двойные кавычки имеют несколько разный смысл. Для вывода значений переменных кавычки не используются (одних переменных без текста). Покажу на примере:
- Код: Выделить всё
-
$a = "привет";
echo $a; // выведет на экран: привет
echo "$a"; // Тоже выведет: привет. Но делать так не правильно
echo "$a друг"; // выведет на экран: привет друг
echo '$a друг' // выведет на экран: $a друг
Т.е. то что в одинарных кавычках воспринимается как простой текст.
Оператор условия:
- Код: Выделить всё
If (условие) {
Код1;
}
else {
Код1;
}
Смысл его таков, если (if) условие верно (существует, имеет смысл) то выполняется код1, если не верно (else), то выполняется код2. Подробнее можно почитать в книжках, ибо тут писать много.
Про операторы цикла тоже писать много не буду. Основаны они на том, что пока выполняется какое либо условие, то мы выполняем код. И так много много раз, хоть до бесконечности.
Например цикл со счетчиком:
- Код: Выделить всё
for ($i=0; $i<6; $i+2) {
Код;
}
Как это работает. Переменная $i это счетчик. Первым выражением $i=0 мы задаем начальное значение, второе выражение $i < 6 – это условие, т.е пока i меньше шести мы продолжаем выполнять код. Третье выражение $i+2 это действие которое выполняется после выполнения кода. Т.е. порядок действий таков (переменную $i буду писать «и», чтоб на русс. Англ. Не переключать каждый раз:)):
«и» равно нулю. Ноль меньше шести? – да. Выполняем код. К «И» прибавляем два. «и» рано 2. 2 меньше шести? – да. Выполняем код. К «И» прибавляем два. «и» рано 4. 4 меньше шести? – да. Выполняем код. К «И» прибавляем два. «и» рано 6. 6 меньше шести? – нет. Цикл останавливается.
Одно полное действие цикла — одна ступень («и» равно нулю. Ноль меньше шести? – да. Выполняем код. К «И» прибавляем два.) называется итерация.
Так же бывают другие типы циклов: с условием, пост условием. Понять их тоже не трудно.
Функции – это уже так сказать готовые мини программы, хотя некоторые совсем не мини. В функции подаются данные и они обрабатываются по определенным правилам. Например если мы функции cos() передадим число 1, или переменную содержащую это число:
- Код: Выделить всё
$a = 1;
сos($a);
то эта функция вернет, высчитает нам значения косинуса из единицы.
Кстати о слове «вернет». Вернет значит передаст. Т.е. мы может значения косинуса передать например переменной.
$b = cos($a);
Функции можно писать и самому, используя все имеющиеся средства языка, в том числе и другие функции, даже написанные самим ранее.. Это очень удобно, чтобы не писать одного и того же кода много раз, а просто каждый раз обращаться к функции.
В запасе языка PHP есть множество встроенных функций. Они различаются по типам, по области применения и т.д. полный список и синтаксисом и описанием можно узреть тут http://php.su/functions/?page=cat
А тут можно прочитать про создание собственных (пользовательских) функций http://php.su/functions/custom/?1
Объекты .Так же есть еще объекты, но это уже намного сложнее, и для начала совсем не обязательно.
Есть еще переменные окружения. Эти переменные пользователю изменять нельзя. Можно только пользоваться данными. Их значение изменяет сам интерпретатор. Для получения данных из таких переменных есть специальная функция getenv(). Переменная SERVER_ADDR содержит айпи адрес пользователя исполняющего сценарий, например просматривающего например сайт. Например мы хотим чтоб на нашем сайте пользователи могли видеть свой IP, то мы создадим «модуль» примерно такого содержания:
- Код: Выделить всё
$ip = getenv("SERVER_ADDR");
echo "ваш IP: $ip";
мы сначала присвоили переменной $ip значение IP адреса пользователя, а потом его вывели на экран с помощью оператора.
В функции getenv() имя переменной нужно указывать в кавычках, как в примере.
Таких переменных очень много, найти можно в справочниках.
Теперь еще хотел бы сказать отдельно за переменные типа массив. Массив это как бы таблица.
В одной строке которой содержаться индексы (номера или имена ячеек), в во второй строке соответственно значения.
Создать такой массив можно с помощью функции array(), назовем его mass:
- Код: Выделить всё
$mass = array ("привет", "пока",2+3, $ip = getenv("SERVER_ADDR") , cos($a));
Массивы можно создавать и непосредственно присвоением значений элементам (читайте дополнительную лит.ру). Только в случае, если содержимое — выражение или функция как в ячейках 2, 3 и 4 кавычки не пишутся. Иначе это уже будет не выражение а просто строка.
Как мы видим элементы массива могут содержать в себе разные типы данных: строки текста, выражения, функции. Могут даже содержать даже массивы. Т.е. получится таблицы внутри таблицы.
Элементы массива нумеруются с нуля. Не один, два ,три. А ноль, один, два и т.д.
Обращаться к элементам массива можно так:
- Код: Выделить всё
Echo $mass[4];
На экран будет выведено значение косинуса, а не строка «cos($a);».
Существуют так же ассоциативные массивы, где вместо нумерации можно задавать ячейкам свои имена.
Массивы иногда очень удобно использовать. Например, есть функция file(), она читает файл построчно (строками) и создает массив, каждый элемент которого содержит все строки файла.
Например в файле test.txt у на такое содержание:
- Код: Выделить всё
Вася
Пошел
В магазин
То:
$text = file(‘text.txt’);
Переменная $text становится массивом из трех элементов. Элемент с индексом 0, содержит «вася», с индексом 1 «пошел», и 2 «в магазин». Функции file() мы передаем путь к файлу. Путь должен быть верным! Данный путь действителен, только если файл лежит в одной папке со скриптом!
Вроде бы все..
Теперь давайте рассмотрим пару небольших примеров реального применения наших знаний.
Пример 1.
На днях я столкнулся с небольшой проблемой. Мне нужно было скачать все изображении со страницы http://www.volgograd.org.ru/maps/maps/rostov/ . их там очень много. По одной я бы сидел очень долго. С учетом моей скорости интернета. Подумав как можно автоматизировать задачу, вспомнил что в тоталкомандере можно автоматически загружать файлы по списку ссылок. Но опять загвоздка, как этот список от сюда вытащить. Сидеть выделять столько ссылок мышкой из исходного кода мучительно, в конце обязательно на нервах рука дрогнет и все насмарку. Посмотрев исходный код мы видим что содержание страницы – таблица. А значит, зажав кнопку ctrl мы сможем выделить столбец. Нас больше интересует столбец имен файлов.
Предварительно наведя на имя(ссылку) мы видим что имена совпадают с именами на сервере. Это уже очень хорошо. Теперь скопировав столбец имен в блокнот, получаем текстовый файл, где с каждой строки имя файла с расширением. Сохраняем файл к примеру text.txt. все фотки находятся в одном каталоге, что уже облегчает работу. Теперь нам нужно понять что же нам надо дальше делать. А делать надо следующее, с помощью функции file() мы прочитаем документ и имя каждого файла окажется в своей ячейке. потом с помощью цикла в каждый элемент массива в начало допишем адрес докаталога, и получим массив с готовыми ссылками. А потом опять циклом этот массив выведем на экран. И у нас готов список ссылок на загрузку! В блокноте глянем сколько получилось имен (строк). Их 137. И приступим.
Кстати, пока не забыл, двумя слешами // обозначаются комментарии, т.е.
- Код: Выделить всё
echo "это код, который исполняется интерпретатором" ; // а это просто комментарий
И после каждой строки, кроме операторов правилами которых этого не предусмотрено должна ставиться точка с запятой — ;
Писать код можно в блокноте или специальных программах с подсветкой синтаксиса. Файл должен быть с расширением .php Начинаться и заканчиваться код должен так:
- Код: Выделить всё
<?php
Наш код;
?>
Теги <?php и ?> показывают границы нашего кода. Все что вне них, интерпретатор выполнять не будет и просто выведет их на экран текстом.
Код с комментариями:
- Код: Выделить всё
<?php
$name=file('base.txt'); // создали массив имен
for ($i=0; $i<=136; $i++) { // оператор <= значит меньше или равною. 136, то что массив начинается с 0, а не единицы. и последний элемент равен кол-во элементов минус один. а оператор ++ прибавляет единицу. в циклах использовать +1 некорректно
$name[$i]="http://www.volgograd.org.ru/maps/maps/rostov/$name[$i]"; //обращаемся к каждому элементу по порядку, в качестве индекса используем счетчик $i. и дописываем в начало путь к каталогу.
}
for ($i=0; $i<=136; $i++) {
echo $name[$i]; //выводим поочередно каждый элемент массива
echo "<br>" ; // выводим тег <br>, чтобы каждая ссылка была с новой строки
}
echo "<br>Готово! А все оказывается просто!"; // от себя добавил ))
?>
Данную программу можно немного оптимизировать, убрав лишний цикл. Т.к. оба цикла выполняют одну и туже работу, мы все действия перенесем в первый цикл, а второй удалим:
- Код: Выделить всё
<?php
$name=file('base.txt'); // создали массив имен
for ($i=0; $i<=136; $i++) { // оператор <= значит меньше или равною.
6, то что массив начинается с 0, а не единицы. и последний элемент равен кол-во элементов минус один. а оператор ++ прибавляет единицу. в циклах использовать +1 некорректно
$name[$i]="http://www.volgograd.org.ru/maps/maps/rostov/$name[$i]"; //обращаемся к каждому элементу по порядку, в качестве индекса используем счетчик $i. и дописываем в начало путь к каталогу.
echo $name[$i]; //выводим поочередно каждый элемент массива
echo "<br>" ; // выводим тег <br>, чтобы каждая ссылка была с новой строки
}
echo "<br>Готово! А все оказывается просто!"; // от себя добавил ))
?>
в итоге за считанные секунды я получил список урлов, поставил их на загрузку, а сам пошел пить кофе и заниматься другими делами
файлы программы можете скачать тут http://dl.dropbox.com/u/16037749/primer.rar
можете запустить её и убедиться, что все работает.
Данную программу можно усовершенствовать, чтоб она список урлов выводила не на экран, а записывала в файл. Это будет вашим домашним заданием Где искать необходимые функции я писал выше.
Во втором примере я опишу как я писал свой модуль http://ruseo.net/moy-modul-dlya-dle-bloki-dlya-opredelennih-stranic-t2535.html. Он уже имеет самое что именно есть прямое отношение к сео и оптимизации. Но это чуть позже, а то утомился
Помните порой легче создать свой "мини сео софт", чем искать готовое. Его кстати может и не существовать вовсе
Если вы действительно заинтересовались программированием на PHP, советую почитать книгу "PHP 5/6 и MySQL 6. Разработка Web-приложений" Дениса Колисниченко. Там очень много хорошего материала. Все понятно излагается. Читайте справочники, и главное учитесь думать и все себе представлять, и будет вам счастье! А все остальное как говорится придет с опытом
Буду ждать комментариев
ruseo.net
Константы
Константы определяются в PHP-программе с помощью функции define( ). Например:
define("PI", 3.1415927);
После определения константа не может быть изменена. В имени константы обычно используются только заглавные буквы.
PHP имеет ряд предопределенных констант. Например:
- _FILE_ содержит имя файла, включая полный путь, который в данный момент читает PHP
- _LINE_ содержит номер строки этого файла
- __DIR__ представляет только путь к файлу
- __CLASS__ представляет имя текущего класса
- __FUNCTION__ представляет имя текущей функции
- __METHOD__ представляет имя текущего метода
- __NAMESPACE__ представляет имя текущего пространства имен
Переменные
Имя любой переменной в PHP начинается со знака $. Имена переменных чувствительны к регистру символов.
Тип переменной не требуется задавать специально. Конкретный тип переменной устанавливается и меняется в ходе выполнения программы.
PHP поддерживает восемь типов данных:
- логический (принимает значения true или false);
- целое число;
- вещественное число с плавающей точкой;
- строка;
- объект;
- массив;
- ресурс (специальный тип);
- null (специальный тип).
Тип переменной можно проверить с помощью функции gettype().
Пример 1
<html> <head> <title>Автоматическое изменение и проверка типа переменной</title> </head> <body> <?php $t = "0"; echo "t = $t -- ".gettype($t)."<br>"; $t += 2; echo "t = $t -- ".gettype($t)."<br>"; $t = $t + 3.5; echo "t = $t -- ".gettype($t)."<br>"; $t = 5 + "5 поросят"; echo "t = $t -- ".gettype($t)."<br>"; $t = 5.0 + "5 поросят"; echo "t = $t -- ".gettype($t); ?> </body> </html>
Тип переменной можно изменить с помощью функции settype().
Пример 2
<html> <head> <title>Изменение типа переменной</title> </head> <body> <?php $t = 3.14; echo "t = $t -- ".gettype($t)."<br>"; settype($t,"string"); echo "t = $t -- ".gettype($t)."<br>"; settype($t,"integer"); echo "t = $t -- ".gettype($t)."<br>"; settype($t,"double"); echo "t = $t -- ".gettype($t)."<br>"; settype($t,"boolean"); echo "t = $t -- ".gettype($t); ?> </body> </html>
Приведение типа переменной осуществляется с помощью операторов:
- (bool) — к логическому типу;
- (int) — к целому числу;
- (double) — к вещественному числу;
- (string) — к строке;
- (array) — к массиву;
- (object) — к объекту.
Отличие от изменения типа с помощью функции settype() состоит в том, что оператор приведения создает временную копию нового типа, оставляя саму переменную без изменений.
Пример 3
<html> <head> <title>Приведение типа переменной</title> </head> <body> <?php $t = 3.14; $tmp = (string) $t; echo "tmp = $tmp -- ".gettype($tmp)."<br>"; $tmp = (int) $t; echo "tmp = $tmp -- ".gettype($tmp)."<br>"; $tmp = (double) $t; echo "tmp = $tmp -- ".gettype($tmp)."<br>"; $tmp = (bool) $t; echo "tmp = $tmp -- ".gettype($tmp)."<br>"; echo "t = $t -- ".gettype($t); ?> </body> </html>
Иногда для упрощения логики программы удобнее использовать переменные имена переменных. PHP предоставляет такую возможность в виде динамических переменных. Динамической называют переменную, имя которой хранится в ней самой.
Пример 4
<html> <head> <title>Использование динамической переменной</title> </head> <body> <?php $t = "Всем"; // переменной t присваиваем значение "Всем" $$t = "привет!"; // Переменной "Всем" присваиваем значение "привет!" echo "$$t ".$$t."<br>"; echo "$t ${$t}<br>"; echo "$t $Всем"; ?> </body> </html>
В PHP возможно обращение к одной и той же переменной с использованием различных имен. Для реализации этого используются ссылки. Ссылки позволяют двум или большему количеству переменных ссылаться на одну и ту же область памяти.
Пример 5
<html> <head> <title>Создание ссылки на переменную</title> </head> <body> <?php $t1 = 96; $t2 = &$t1; echo "t1 = $t1; t2 = $t2<br>"; $t1 = 315; echo "t1 = $t1; t2 = $t2"; ?> </body> </html>
Операторы
Операторы PHP напоминают общеизвестные операторы языка Си.
Унарные операторы
— | Изменение знака на противоположный |
! | Дополнение. Используется для реверсирования значения логических переменных |
++ | Увеличение значения переменной. Может применяться и как префикс, и как суффикс |
— | Уменьшение значения переменной. Может применяться и как префикс, и как суффикс |
Арифметические операторы
— | Вычитание |
+ | Сложение |
* | Умножение |
/ | Деление |
% | Остаток от деления |
Оператор конкатенации
Оператор конкатенации «.» присоединяет правую строку к левой.
Пример 6
<html> <head> <title>Конкатенация строк</title> </head> <body> <?php $a = "Всем"; $b = $a." привет!"; echo $b; ?> </body> </html>
Оператор конкатенации обрабатывает операнды любых типов как строки. Результат его выполнения всегда является строкой.
Операторы присваивания
= | Присваивание |
+= | Сложение ($n += 777; аналогично $n = $n + 777;) |
-= | Вычитание ($n -= 777; аналогично $n = $n — 777;) |
*= | Умножение |
/= | Деление |
%= | Остаток от деления |
.= | Конкатенация ($n .= «777»; аналогично $n = $n.»777″;) |
Битовые операторы
Битовые операторы позволяют изменять отдельные биты целых чисел.
& | И |
| | ИЛИ |
^ | Исключающее ИЛИ |
~ | Инверсия |
>> | Сдвиг вправо |
<< | Сдвиг влево |
Операторы сравнения
> | Больше ( Больше ли первое значение, чем второе?) |
>= | Больше или равно ( Верно ли, что первое значение не меньше второго?) |
< | Меньше ( Меньше ли первое значение, чем второе?) |
<= | Меньше или равно (Верно ли, что первое значение не больше второго?) |
== | Равно (Равнозначны ли значения двух переменных?) |
=== | Идентично (Одинаковы ли как значения, так и типы двух переменных?) |
!= , <> | Не равно (Не равны ли значения двух переменных?) |
!== | Не идентично (Не одинаковы ли значения или типы данных двух переменных?) |
Логические операторы
Логические операторы отличаются от битовых тем, что работают не с числами, а с логическими значениями: TRUE и FALSE.
and | И |
or | ИЛИ |
xor | Исключающее ИЛИ |
! | Инверсия |
>> | Сдвиг вправо |
<< | Сдвиг влево |
&& | И |
|| | ИЛИ |
Логические операторы «И» и «ИЛИ» имеют два формата. Это не синонимы. Дело в том, что оператор or имеет приоритет ниже, чем ||, а and — ниже, чем &&. Таким образом, при построении сложных условных выражений можно обойтись без скобок. Однако, в таком способе указания порядка проще и запутаться.
Проверка содержимого переменной
Иногда необходимо проверить, существует ли переменная или какое она имеет значение. Ниже приведены функции, позволяющие выполнить такие действия.
isset($имя_переменной) #Истина, если переменная объявлена даже без присваивания значения.
empty($имя_переменной) #Истина, если значение переменной равно нулю или пустой строке, либо переменная не объявлена.
РНР также позволяет проверить тип переменной. Например, для того чтобы проверить, является ли переменная целочисленной, следует воспользоваться функцией
is_int($number)
Результатом выполнения этой функции является TRUE, если переменная $number имеет тип integer. Рассмотрим подобные функции.
is_array ($var2) проверяет, является ли переменная $var2 массивом.
is_f loat ($number) проверяет, является ли переменная $number числом с плавающей точкой.
is_null ($varl) проверяет, равно ли значение переменной $varl нулю
is_numeric($string) проверяет, является ли переменная $string числовой строкой.
is_string ($string) проверяет, является ли переменная $string строкой.
Для проверки обратных условий следует воспользоваться символом восклицания (!). Например, при обработке следующего выражения будет получено значение TRUE, если переменная не объявлена:
! isset($имя_переменной)
Управляющие структуры
Условные операторы
В языке PHP два условных оператора: if и ?.
Существует три типа оператора if. Первый тип — базовый условный оператор. Например:
if ($a > $b) { echo "А больше Б"; }
Альтернативный синтаксис оператора if:
if ($a > $b): echo "А больше Б"; endif;
Второй тип — условный оператор if-else. Например:
if ($a > $b) { echo "А больше Б"; } else { echo "А не больше Б"; }
Альтернативный синтаксис оператора if-else:
if ($a > $b): echo "А больше Б"; else: echo "А не больше Б"; endif;
Третий тип — условный оператор if-elseif. Например:
if ($a > $b) { echo "А больше Б"; } elseif ($a == $b) { echo "А равно Б"; } else { echo "А меньше Б"; }
Альтернативный синтаксис оператора if-elseif:
if ($a > $b): echo "А больше Б"; elseif ($a == $b): echo "А равно Б"; else: echo "А меньше Б"; endif;
Условный оператор ? возвращает одно из двух значений, разделенных двоеточием. Использование оператора ? может сделать более компактным текст программы. Например:
$text = ($a == $b) ? "А равно Б" : "А не равно Б"; echo $text;
Оператор выбора
Оператор выбора switch оценивает одно выражение и в зависимости от его значения выполняет один из нескольких блоков программы. Выражение в операторе switch чаще всего бывает простой переменной. Например:
switch ( $a ) { case 1: echo "А равно 1"; break; case 2: echo "А равно 2"; break; case 3: echo "А равно 3"; break; default: echo "А не равно ни 1, ни 2, ни 3"; }
Альтернативный синтаксис оператора switch:
switch ( $a ): case 1: echo "А равно 1"; break; case 2: echo "А равно 2"; break; case 3: echo "А равно 3"; break; default: echo "А не равно ни 1, ни 2, ни 3"; endswitch;
Цикл с параметром
Цикл с параметром for относится к наиболее старому и заслуженному виду цикла.
Пример 7
<html> <head> <title>Цикл for</title> </head> <body> <?php for ($a = 11; $a <= 19; $a++) { echo "квадрат $a равен ".($a*$a)."<br>"; } ?> </body> </html>
Альтернативный синтаксис оператора for:
for ($a = 11; $a <= 19; $a++): echo "квадрат $a равен ".($a*$a)."<br>"; endfor;
Циклы с условием
В языке PHP сущеcтвует два типа цикла с условием:
- while — цикл с предусловием;
- do .. while — цикл с постусловием.
Оператор while оценивает значение условия и, если оно истинно, выполняет действия в фигурных скобках (тело цикла). Как только значение условия станет ложным, выполнение цикла прекращается.
Пример 8
<html> <head> <title>Цикл while</title> </head> <body> <?php $a = 11; while ( $a <= 19 ) { echo "квадрат $a равен ".($a*$a)."<br>"; $a++; } ?> </body> </html>
Замечание для продвинутых: сокращенная запись не сработает как ожидается:
while ( $a <= 19 ) { echo "квадрат $a равен ".($a*($a++))."<br>"; // так не работает!!! }
Альтернативный синтаксис оператора while:
while ( $a <= 19 ): echo "квадрат $a равен ".($a*$a)."<br>"; $a++; endwhile;
Цикл do .. while отличается от цикла while лишь тем, что истинность условия проверяется не до, а после выполнения тела цикла.
htmlweb.ru
Строки и числа
Самыми простыми типами данных в PHP являются строки и числа.
Числа обозначают сами себя, например 1, 12, 145, а вот строки требуется брать в кавычки (одинарные или двойные — без разницы):
Числа также могут быть дробями. Разделителем целой и дробной части служит знак «точка». К примеру, число 10.754 — это дробь.
Переменные
Одним из самых главных и распространенных объектов в программировании является переменная.
Переменная — это такой объект, который может хранить внутри себя различные данные, например, строки или числа.
Имя переменной должно состоять из английских букв: больших или маленьких, а также цифр и знака_подчеркивания.
В PHP перед переменной обязательно должен быть написан знак доллара $:
Операция присваивания
Очень важным элементом программирования является операция присваивания.
С помощью присваивания мы можем положить в переменную результат какой-либо операции, например, строку или число, а затем достать эти данные в нужном нам месте и воспользоваться ими.
Пример присваивания:
Комментарии
К коде PHP, так же, как и в HTML и CSS, можно оставлять комментарии, которые будут проигнорированы PHP при выполнении программы.
Их обычно используют для того, чтобы оставлять какие-либо пометки в коде или временно убрать какие-то строки кода, которые вам мешают, а потом иметь возможность быстро их вернуть обратно.
Комментарии могут быть многострочными и однострочными:
Функции
В программировании есть такое понятие, как функции. В отличии от переменных, которые хранят внутри себя некоторые данные, функции выполняют операции над этими данными.
Функция отличается от переменной тем, что перед именем функции не ставится знак доллара (он нужен только для переменных), а также тем, что у нее после названия стоят круглые скобки ( ), внутри которых через запятую можно перечислять параметры.
Параметры — это данные (например, строки или числа), которые мы даем функции, она производит над ними какие-то операции и возвращает нам результат.
Например, в PHP есть стандартная функция sqrt(), которая параметром принимает число, а возвращает квадратный корень этого числа.
То есть, если ей передать число 9, вот так — sqrt(9), то на выходе получим число 3. Полученное число мы можем записать в какую-либо переменную или вывести на экран.
Давайте найдем корень из 25 и запишем в переменную $a:
Функция echo
В PHP существует специальная функция echo, которая позволяет вывести какой-либо текст в окно браузера. В отличие от других функций, после echo не требуются круглые скобки ().
Следующий код выводит на экран заданный текст:
А в следующим коде переменной $text присваивается фраза, а затем содержимое этой переменной выводится на экран:
Математические операции
В PHP между числами и переменными можно совершать различные математические операции: сложение (знак +), вычитание (знак -), умножение (знак *), деление (знак /).
Чтобы понять, как с ними работать, посмотрите на следующий пример:
Можно сначала записать числа в переменные, а потом уже проводить операции с переменными:
А можно также одновременно производить операции и с числами, и с переменными:
Специальные значения
В PHP, как и в других языках программирования, существуют ключевые слова для некоторых специальных значений.
Значения true, false
Значения true и false обозначают истину и ложь соответственно. Они используются для таких вещей, которые предполагают два варианта ответа — да или нет.
К примеру, на вопрос ‘вам уже есть 18 лет?’ в можете ответить да, то есть true, или нет, то есть false.
Эти значения называются логическими.
Значение null
Значение null обозначает ‘ничего’. К примеру, если мы попробуем обратиться к переменной, которой мы еще не задали значение — то ее значение и будет null.
Функция var_dump
Бывают ситуации, когда нам нужно посмотреть содержимое переменной, чтобы понять, почему наш код работает не так, как мы хотели. Обычно на помощь приходит функция echo, однако, бывают ситуации, когда echo не работает.
Например, если переменная является пустой строкой », то выведя ее содержимое на экран с помощью echo, мы ничего не увидим.
Вторая ситуация — когда переменная содержит строку с пробелами по краям, например:
Для решения описанных выше проблем следует использовать функцию var_dump(), которая предназначена для отладки кода и позволяет выводить значения переменных и их тип.
С помощью этой функции мы можем увидеть, что переменная пуста, можем подсчитать количество пробелов по краям строки, можем увидеть, что переменная логическая и имеет значение true или false (об этих значениях чуть позже).
Пример использования var_dump():
PHP внутри HTML
PHP код можно вставлять внутрь HTML кода:
Сложение строк в PHP
В PHP, в отличие от многих других языков, строки складываются с помощью знака «точка»:
Получение определенного символа строки
В PHP можно получить доступ к определенному символу строки по его номеру таким образом: $a[n] – n-ный символ строки (учтите, что нумерация идет с нуля):
Сложности с операцией присваивания
Очень часто новички не понимают, что присваивание отличается от обычного равенства. Посмотрите следующий пример:
С точки зрения математики запись $a = $a + 2 абсурдна, но не с точки зрения программирования.
В данном случае переменная $a имела значение 1, а затем мы переменной $a присвоили новое значение — старое значение переменной $a плюс 2.
Операции инкремента и декремента
Операция $a++ или ++$a – увеличивает переменную $a на единицу. Эта операция называется инкремент.
Операция $a— или —$a – уменьшает переменную $a на единицу. Эта операция называется декремент.
Примеры:
Давайте посмотрим, в каких случаях проявляется разница между ++a и a++.
Пусть у нас есть код echo ++a и код echo a++.
В первом случае переменная сначала увеличится на единицу, а потом выведется, а во втором случае — сначала выведется, а потом увеличится.
Операции +=, -=, *=, /=
Мы уже рассматривали код, который демонстрирует сложности с операцией присваивания:
В данном случае мы присваиваем переменной $a ее текущее значение, увеличенное на 2. Однако PHP позволяет записать этот код еще короче с помощью оператора +=:
Кроме того, существуют операторы -=, *=, /=, которые эквивалентны следующему коду:
Операция .=
Существует также операция .=:
Типизация переменных
Что будет, если попробовать сложить, к примеру, число и строку, вот так: 3+’3′? В результате вы получите число 6. Это значит, что PHP автоматически осуществляет преобразование типов при необходимости, вам не нужно за это переживать.
То же самое случится, если, к примеру, сделать так: 3+true или 3+false. Попробуйте эти примеры сами и узнайте к чему преобразуется true в этом случае, а чему — false.
code.mu
I was confused at first about object assignment, because it's not quite the same as normal assignment or assignment by reference. But I think I've figured out what's going on.
First, think of variables in PHP as data slots. Each one is a name that points to a data slot that can hold a value that is one of the basic data types: a number, a string, a boolean, etc. When you create a reference, you are making a second name that points at the same data slot. When you assign one variable to another, you are copying the contents of one data slot to another data slot.
Now, the trick is that object instances are not like the basic data types. They cannot be held in the data slots directly. Instead, an object's "handle" goes in the data slot. This is an identifier that points at one particular instance of an obect. So, the object handle, although not directly visible to the programmer, is one of the basic datatypes.
What makes this tricky is that when you take a variable which holds an object handle, and you assign it to another variable, that other variable gets a copy of the same object handle. This means that both variables can change the state of the same object instance. But they are not references, so if one of the variables is assigned a new value, it does not affect the other variable.
<?php
// Assignment of an object
Class Object{
public $foo="bar";
};
$objectVar = new Object();
$reference =& $objectVar;
$assignment = $objectVar
//
// $objectVar --->+---------+
// |(handle1)----+
// $reference --->+---------+ |
// |
// +---------+ |
// $assignment -->|(handle1)----+
// +---------+ |
// |
// v
// Object(1):foo="bar"
//
?>
$assignment has a different data slot from $objectVar, but its data slot holds a handle to the same object. This makes it behave in some ways like a reference. If you use the variable $objectVar to change the state of the Object instance, those changes also show up under $assignment, because it is pointing at that same Object instance.
<?php
$objectVar->foo = "qux";
print_r( $objectVar );
print_r( $reference );
print_r( $assignment );
//
// $objectVar --->+---------+
// |(handle1)----+
// $reference --->+---------+ |
// |
// +---------+ |
// $assignment -->|(handle1)----+
// +---------+ |
// |
// v
// Object(1):foo="qux"
//
?>
But it is not exactly the same as a reference. If you null out $objectVar, you replace the handle in its data slot with NULL. This means that $reference, which points at the same data slot, will also be NULL. But $assignment, which is a different data slot, will still hold its copy of the handle to the Object instance, so it will not be NULL.
<?php
$objectVar = null;
print_r($objectVar);
print_r($reference);
print_r($assignment);
//
// $objectVar --->+---------+
// | NULL |
// $reference --->+---------+
//
// +---------+
// $assignment -->|(handle1)----+
// +---------+ |
// |
// v
// Object(1):foo="qux"
?>
php.net
Теги PHP
Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как <?php и ?>, которые указывают PHP, когда начинать и заканчивать обработку кода между ними. Подобный способ обработки позволяет PHP внедряться во все виды различных документов, так как всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано
парсером PHP.
PHP также допускает короткие теги <? и ?>, однако использовать их нежелательно, так как они доступны только если включены с помощью конфигурационной директивы php.inishort_open_tag, либо если PHP был сконфигурирован с опцией —enable-short-tags .
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.
Изолирование от HTML
Все, что находится вне пары открывающегося и закрывающегося тегов,
игнорируется интерпретатором PHP, у которого есть возможность обрабатывать файлы со смешанным содержимым. Это позволяет PHP-коду быть встроенным в документы HTML, к примеру, для создания шаблонов.
<p>Это будет проигнорировано PHP и отображено браузером.</p> <?php echo ‘А это будет обработано.’; ?> <p>Это тоже будет проигнорировано PHP и отображено браузером.</p>
Это работает так, как и ожидается, потому что когда интерпретатор PHP встречает закрывающие теги ?>, он просто начинает выводить все что найдет пока не встретит другой открывающий тег за исключением случая с содержащимся внутри кода условным оператором, в котором интерпретатор определяет результат условия перед принятием решения что пропустить.
Использование структур с условиями
<?php if ($expression == true): ?> Это будет отображено, если выражение истинно. <?php else: ?> В ином случае будет отображено это. <?php endif; ?>
Пример №1 Продвинутое изолирование с использованием условий
В этом примере PHP пропускает блоки, где условие не соблюдается. Даже несмотря на то, что они находятся вне пары открывающих/закрывающих тегов, PHP пропустит их в соответствии с условием, так как интерпретатор PHP будет перепрыгивать через блоки, содержащиеся внутри условия, которое не соблюдается.
При выводе больших блоков текста выход из режима синтаксического разбора PHP обычно более эффективен, чем отправка текста с помощью функций echo илиprint.
Существует четыре набора тегов, которые могут быть использованы для обозначения PHP-кода. Из них только два <?php ?>и<script language=»php»> </script>) всегда доступны. Другими двумя являются короткие теги и теги в стиле ASP, которые могут быть включены или выключены в конфигурационном файлеphp.ini.Хотя короткие теги и теги в стиле ASP могут быть удобны, они не так переносимы, как длинные версии, и поэтому не рекомендуются. Кроме того, если вы намереваетесь вставлять PHP-код в XML или XHTML, чтобы соответствовать XML стандартам, вам следует использовать форму<?php ?>.
1. <?php echo ‘если вы хотите работать с документами XHTML или XML, делайте так’; ?> 2. <script language=»php»> echo ‘некоторые редакторы (например, FrontPage) не любят инструкции обработки’; </script> 3. <? echo ‘это простейшая инструкция обработки SGML’; ?> <?= выражение ?> Это синоним для «<? echo выражение ?>» 4. <% echo ‘Вы можете по выбору использовать теги в стиле ASP’; %> <%= $variable; # Это синоним для «<% echo . . .» %>
Короткие теги (третий пример) доступны, только когда они включены с помощью директивы short_open_tagв конфигурационном файлеphp.ini, либо если PHP был скомпилирован с опцией—enable-short-tags.
Теги в стиле ASP (четвертый пример) доступны, только когда они включены с помощью директивы asp_tagsв конфигурационном файлеphp.ini.
Замечание:
Следует избегать использования коротких тегов при разработке приложений или библиотек, предназначенных для распространения или размещения на PHP-серверах, не находящихся под вашим контролем, так как короткие теги могут не поддерживаться на целевом сервере. Для создания переносимого, совместимого кода, не используйте короткие теги.
Разделение инструкций
Как в C или Perl, PHP требует окончания инструкций точкой запятой в конце каждой инструкции. Закрывающий тег блока PHP-кода автоматически применяет точку с запятой; т.е. нет необходимости ставить точку с запятой в конце последней строки блока с PHP-кодом. Закрывающий тег блока «поглотит» немедленно следующий за ним переход на новую строку, если таковой будет обнаружен.
<?php echo ‘Это тест’; ?> <?php echo ‘Это тест’ ?> <?php echo ‘Мы опустили последний закрывающий тег’;
Замечание:
Закрывающий тег PHP-блока в конце файла не является обязательным, и в некоторых случаях его опускание довольно полезно, например, при использовании includeилиrequire, так, что нежелательные пробелы не останутся в конце файла и вы все еще сможете добавить http-заголовки после подключения к ответу сервера. Это также удобно при использовании буферизации вывода, где также нежелательно иметь пробелы в конце частей ответа, сгенерированного подключаемыми файлами.
Комментарии
PHP поддерживает комментарии в стиле ‘C’, ‘C++’ и оболочки Unix (стиль Perl). Например:
<?php echo «Это тест»; // Это однострочный комментарий в стиле c++ /* Это многострочный комментарий еще одна строка комментария */ echo «Это еще один тест»; echo «Последний тест»; # Это комментарий в стиле оболочки Unix ?>
Однострочные комментарии идут только до конца строки или текущего блока PHP-кода, в зависимости от того, что идет перед ними. Это означает, что HTML-код после // … ?> или # … ?> будет напечатан:?>завершает режим PHP и возвращает режим HTML, а // или # не могут повлиять на это. Если включена директива asp_tags, то аналогичное поведение будет и с // %> и # %>. Однако, тег </script> не завершает режим PHP в однострочном комментарии.
<h1>Это <?php # echo «простой»;?> пример</h1> <p>Заголовок вверху выведет ‘Это пример’.</p>
‘C’-комментарии заканчиваются при первой же обнаруженной последовательности */. Убедитесь, что вы не вкладываете друг в друга ‘C’-комментарии. Очень легко допустить эту ошибку при комментировании большого блока кода.
<?php /* echo «Это тест»; /* Этот комментарий вызовет проблему */ */ ?>
Операторы: сравнения
$a == $b // TRUE если $a равно $b.
$a === $b // TRUE если $a равно $b И имеет тот
же тип
$a != $b // TRUE если $a не равно $b.
$a !== $b // TRUE если $a не равно $b ИЛИ в
случае, если они разных типов.
$a < $b // TRUE если $a строго меньше $b.
$a > $b // TRUE если $a строго больше $b.
$a <= $b // TRUE если $a меньше или равно $b.
$a >= $b // TRUE если $a больше или равно $b.
Операторы: логические
$a and $b // TRUE если и $a, и $b TRUE.
$a or $b // TRUE если или $a, или $b
TRUE.
!$a // TRUE если $a не TRUE.
$a && $b // TRUE если и $a, и $b TRUE.
$a || $b // TRUE если или $a, или $b
TRUE.
$a and $b and $c; $a and $b or $c
$a and ($b and $c) $a and $b && $c
$a and ($b or $c) $a and $b || $c
Типы данных
PHP поддерживает восемь простых типов.
Четыре скалярных типа:
-
boolean
-
integer
-
float(число с плавающей точкой, также известное какdouble)
-
string
Два смешанных типа:
-
array
-
object
Два специальных типа:
-
resource
-
NULL
Как правило, программист не устанавливает тип переменной; обычно это делает PHP во время выполнения программы в зависимости от контекста, в котором используется переменная.
Замечание:
Если вы желаете проверить тип и значение определённого выражения, используйтеvar_dump().
Если же вам для отладки необходимо просто удобочитаемое представление типа, используйте gettype(). Чтобы проверить на определенный тип, не используйте gettype(), применяйте для этого is_type функции. <?php $a_bool = TRUE; // логический $a_str = «foo»; // строковый $a_str2 = ‘foo’; // строковый $an_int = 12; // целочисленный echo gettype($a_bool); // выводит: boolean echo gettype($a_str); // выводит: string // Если это целое, увеличить на четыре if (is_int($an_int)) { $an_int += 4; } // Если $a_bool — это строка, вывести ее // (ничего не выводит) if (is_string($a_bool)) { echo «Строка: $a_bool»; } ?>
Если вы хотите принудительно изменить тип переменной, вы можете либо привестипеременную, либо использовать функциюsettype().
Обратите внимание, что переменная, в зависимости от ее типа в данный момент, в определённых ситуациях может иметь разные значения.
Булев тип
Это простейший тип. booleanвыражает истинность значения. Он может быть либо TRUE либо FALSE.
Для указания boolean, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.
<?php $foo = True; // присвоить $foo значение TRUE ?>
Обычно, некоторый операторвозвращает boolean значение, которое потом передается управляющей конструкции.
<?php // == это оператор, который проверяет // эквивалентность и возвращает boolean if ($action == «show_version») { echo «The version is 1.23»; } // это необязательно… if ($show_separators == TRUE) { echo «<hr>n»; } // … потому что следующее имеет тот же самый смысл: if ($show_separators) { echo «<hr>n»; } ?>
Для явного преобразования в boolean, используйте (bool) или (boolean). Однако, в большинстве случаев приведение типа необязательно, так как значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует boolean аргумент.
При преобразовании в boolean, следующие значения рассматриваются как FALSE:
-
само значение booleanFALSE
-
integer0 (ноль)
-
float0.0 (ноль)
-
пустая строка, истрока»0″
-
массивбез элементов
-
объектбез полей (только для PHP 4)
-
особый тип NULL(включая неустановленные переменные)
-
Объекты SimpleXML, созданные из пустых тегов
Все остальные значения рассматриваются как TRUE (включая любой resourceа также число -1).
Целые числа
Integer- это число из множества ℤ = {…, -2, -1, 0, 1, 2, …}.
Целые могут быть указаны в десятичной, шестнадцатеричной или восьмеричной системе счисления, по желанию с предшествующим знаком (- или +).
Если вы используете восьмеричную систему счисления, вы должны предварить число 0 (нулем), для использования шестнадцатеричной системы нужно поставить перед числом 0x.
Пример №1 Целые
<?php $a = 1234; // десятичное число $a = -123; // отрицательное число $a = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе) $a = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе) ?>
Размер целого зависит от платформы, хотя, как правило, максимальное значение около двух миллиардов (это 32-битное знаковое). PHP не поддерживает беззнаковые целые.
Превышение размера целого
Если вы определите число, превышающее пределы целого типа, оно будет интерпретировано как число с плавающей точкой. Также, если вы используете оператор, результатом работы которого будет число, превышающее пределы целого, вместо него будет возвращено число с плавающей точкой.
<?php $large_number = 2147483647; var_dump($large_number); // вывод: int(2147483647) $large_number = 2147483648; var_dump($large_number); // вывод: float(2147483648) // это справедливо и для шестнадцатеричных целых: var_dump( 0x80000000 ); // вывод: float(2147483648) $million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // вывод: float(50000000000) ?>
В PHP не существует оператора деления целых. Результатом 1/2будет число с плавающей точкой0.5. Вы можете привести значение к целому, что всегда округляет его в меньшую сторону, либо использовать функциюround().
<?php var_dump(25/7); // float(3.5714285714286) var_dump((int) (25/7)); // int(3) var_dump(round(25/7)); // float(4) ?>
Числа с плавающей точкой
Числа с плавающей точкой (они же числа двойной точности или действительные числа) могут быть определены при помощи любого из следующих синтаксисов:
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
Строки
Строка — это набор символов. В PHP символ это то же самое, что и байт, это значит, что возможно ровно 256 различных символов. Это также означает, что PHP не имеет встроенной поддержки Unicode’а. Некоторую поддержку Unicode’а обеспечивают функции utf8_encode()иutf8_decode().
Замечание:
Нет никаких проблем, если строка очень велика. Практически не существует ограничений на размер строк, налагаемых PHP, так что нет абсолютно никаких причин беспокоиться об их длине.
Строка может быть определена тремя различными способами.
-
одинарными кавычками
-
двойными кавычками
-
heredoc-синтаксисом
studfiles.net