2.4. PHP

PHP це скриптовий server-side мова програмування, призначений в основному для включення в html сторінку і виконуваний сервером перед видачею сторінки браузеру. Це не CGl, але цілком заміняє його! PHP дуже схожий на ASP (існує навіть конвертор asp2php), але пристосований до unix-Kke систем і найчастіше вживається з web-сервером apache, хоча може працювати із MS IIS ів принципі збудь-яким іншим веб-сервером. Крім того, PHP3 єоб'ектно-орієнтованим. На мій погляд, основну перевагу PHP - простота, гнучкість ішвидкість виконання. Мені, наприклад, знадобилося хвилин 15 для перегляду мануалів і прикладів, для того, щоб перевести весь конвент мого сайта на SQL (докладніше у наступних Шагах) і написати php-скрипт для видачі його в html коді із шаблоновим дизайном. Тепер, щоб викласти на сайт нову чи статтю просто новина, треба лише додади новий запис на sql сервері за допомогою MS Access чи web-інтерфейсу sql, написаного до речі теж на php, апризапиті сторінки користувачем відповідний php-скрипт вивуджу є з sql те, що йому треба видаєвже красиво оформлену, готову стор нку.

SQL. От це єще однією перевагою PHP, таке враження, що він (PHP) просто породжений існувати в зв'язуванні apache+php+sql. Для свій роботи вибраний MySQL, що також існує іпід linux іпід win9x/NT.

Як ілюстрація простоти php єприклад, що передає список файлів у поточному каталозі.

<HTML><BODY>

Список файл в:

<?

$dir = opendir("."); while($file = readdir($dir)) echo "$file<BR>"; closedir($dir);

?>

</BODY></HTML>

Код, поміщений утеги <? і ?> не передається браузеру, а виконується безпосередньона стороні сервера А видається те, що виводить команда echo. Здається, PHP схожий на C? чи Perl? чи Basic? Аотдо стат той же приклад в ООП вар ант :

<?

$dir = dir(".");

while($file = $dir->read())

echo "$file<BR>"; $dir->close();

?>

Для наочності, ще приклад для роботи з MySQL:

<?

$conn=mysql_connect("127.0.0.1"); if (mysql_select_db("db",$conn)) { $res=mysql_query("select * from tabl", $conn); while(($data=mysql_fetch_row($res))) echo("$data[0] $data[1]\n"); } else

echo "Error!\n";

?>

Цей скрипт виводить таблицю tabl збазиданих db на локальному MySQL сервер . 2.4.1 . Основи мови

Почнемо зтого, що для PHP снує 4- способу в дд лення його в д загального коду HTML (мається

чер ез для нтер пр етац ї)

1. <? echo ("SGML інсрукщгп"); ?>

2. <?php echo("XML документ^"); ?>

3. <script language="pbp">

echo ("спеціально для FrontPage"); </script>

4. < % echo ("ASP-стиль "); %>

< %= $variable; # Коментар "<%echo .." %>

Далі необхідно сказати іпро те, що інструкції в PHP відокремлюються друг від крапкою зкоми. Хоча перед закриваючим тегом (?>) крапку зкоми ставить не обов'язково <?php echo "This is a test"; echo "This is a test also" ?>

PHP підтримує коментарі встилі 'C', 'C++' і Unix shell. Наприклад:

<?php

echo "test"; // Коментар устил C++ /* Це багато строковий

коментар устилі C++*/

echo "test2";

echo "Test3"; # Це unix-shell коментар

?>

ТИПИ

PHP п дтримує наступн типи даних:

• integer (цілочислені)

• floating-point numbers чи double (числа зкоми, що плаває,)

• string (рядка, текст)

• array (масиви)

• object (об'єктьі)

Перетворення типів відбувається втакий спосіб. Якщо перемінна дорівнює рядку (текст улапках) то ця перемінна стає строковою. Якщо знею відбувається одна з багатьох математичних чи функцій вона прирівнюється численною зміною, вона стає чисельної, причому якщо дорівнює цілому значенню - те стане типом double. Приклад: $foo = "0"; // $foo рядок (ASCII 48)

$foo++; // $foo теж рядок "1" (ASCII 49)

$foo += 1; // $foo тепер integer (2)

$foo = $foo + 1.3; // $foo тепер double (3.3)

$foo = 5 + "10 поросят"; // $foo тепер знову integer (15)

$foo = 5 + "10 шухляд"; // $foo іпо колишньому integer (15) значення вдужках- результуюче значення перем нної Перетворювати типи можна чистий устилі мови C++: $foo = 10; // $foo це integer

$bar = (double) $foo; // $bar це double Дозволений перетворення:

• (int), (integer) - cast to integer

• (real), (double), (float) - cast to double

• (string) - cast to string

• (array) - cast to array

• (object) - cast to object

До статі, визначити тип перемінної можна функціями gettype(), is_long(), is_double(), is_string(), is_array() is_object().

ОБЛАСТЬ ВИДИМОСТІ ПЕРЕМІННИХ

По-перше. Усі перемінні починаються із символу $

По-друге снують границ визначення перем нних. Наприклад для того щоб використовувати глобальні перемінні у функціях, необхідно їхній спочатку декларувати як глобальні, інакше треба використовувати локальн перем нн . Приклад: $a = 1; /* глобальне визначення */ Function Test () {

echo $a; /* локальна перем нна */ }

Test ();

echo $a;

Утакий спосіб у функції використовується локальним, власним перемінна ірезультатом програми буде висновок чисел 2  1, ане2  2, як деяк могли подумати.

Якщо треба у функції використовувати глобальні перемінні, необхідно зробити так (декларувати за

допомогою оператора global):

$a = 1; /* глобальне визначення */

Function Test () {

global $a;

$a=2;

echo $a; /* локальна перем нна */

}

Test ();

echo $a;

Тепер у функції перевизначено глобальну перемінну і висновок буде числа 2 і 2. Але єй інший спосіб добратися до глобально-визначених даних - через асоціативний масив $GLOBALS[]. Приклад попередньої програми, реалізований новим способом: $a = 1; /* глобальне визначення */ Function Test () {

$GLOBALS["a"]=2;

echo $a; /* локальна перем нна */

}

Test ();

echo $a;

Зверніть увагу перемінна вмасиві вказується без символу $

Кр м цього про PHP надає можлив сть використовувати статичн перем нний. Ус як у C/C++. Function Test () { static $a = 0; echo $a;

$a++;

}

Test(); Test(); Test();

Результатом виконання цього скрипта буде висновок чисел 0,1 і 2. ПЕРЕМІННІ

Швидше за все незабаром вам знадобляться перемінні динамічно (уході роботи скрипти) зм нюваним найменуванням. Приклад: $a = "hello"; $$a = "world";

Даний запис означає, що перем нної з м'ям a ми привласнюємо значення "hello". Наступною операцією перемінної зі ім'ям, що зберігається в перемінній зі ім'ям a, тобто - перемінної hello ми привласнюємо значення "world" echo "$a ${$a}"; теж саме, що echo "$a $hello";

У результати ми одержимо на екран hello world

Справа декілька ускладнюється, якщо треба використовувати подібні масиви. Адже якщо записати $$a[1] - інтерпретатору треба буде знати, що використовувати вякості перемінної - $a чи $$a (ім'я, що зберігається в $a). Утакому випадком вам прийдеться використовувати наступний синтаксис -${$a[1]} увипадку, якщо треба використовувати перемінну зім'ям, що зберігається вмасиві $a з індексом 1 і ${$a}[1] віншому випадку (якщо треба використовувати елемент 1 масиву зім'ям, що збер гається в перем нної $a.

АРИФМЕТИЧНІ ОПЕРАЦІЇ

Арифметичних операцій в PHP всього п'ять, от вони: •    $a + $b

• $a - $b

• $a * $b

• $a / $b

• $a % $b

Результат виконання останньої операції - залишок від розподілу $a на $b. СТРОКОВІ ОПЕРАЦІЇ

Ха! Атут ітого менше! Чисто строковою операцією вважається операція додавання двох рядків. Причому виглядає вона досить незвичайно, але практично:

• $c = $a . $b;

Тобто символом цієї операції є крапка. А результатом її виконання буде звичайний рядок, що складається з $a $b

ОПЕРАЦІЯ ПРИСВОЮВАННЯ

Ну отут узагалі нічого складного, вона завжди одна, це знак '=' і природно цей знак означає, що перемінної злева від нього буде привласнене значення, отримане в результаті виконання яких або чи операцій перемінної/константи зправої сторони. Причому отут можливо якийсь С++ варіанти, якось:

$a = ($b = 4) + 5; // $a буде дор внює 9, а $b 4-м. $a += 5; // аналог чно $a = $a + 5; $b = "Привіт ";

$b .= "усім!"; // аналогічно $Ь="Привіт усім!"

ДВОИЧНЫЕ ОПЕРАЦІЇ

Аа...  отут н чого нового:

$a & $b Побітове И (AND) $a | $b Побітове ЧИ (oR) ~ $a Що Виключає чи (XOR) $a << $b Зрушення вл во на $b б тов $a >> $b Зрушення вправо на $b бітов

ЛОГІЧНІ ОПЕРАЦІЇ

Ус теж...

$a and $hi (AND)

$a && $b теж саме, що і попереднє $a or $b або (OR) $a || $b теж, що і попереднє $a xor $b виключне або (XOR) ! $a інверсія (NOT)

ОПЕРАЦІЇ ПОРІВНЯННЯ

Тут буде що-небудь нове чи ні? Навіть коментувати ці операції не буду...

$a == $b

$a != $b

$a < $b $a > $b $a <= $b $a >= $b

У PHP існує також, як ів C++, тринарний оператор '?:'. Хто не знає - поясню на прикладі. $res= (expr1) ? (expr2) : (expr3);

Результатом цієї операції буде значення (expr2), утому випадку, якщо expr1==1 і значення expr3 у противному випадку. Де всі ці expr1, expr2, expr3 - є перемінними/ чи константами математичними вираженнями. Такий запис по суті своєї аналогічний наступної: if (expr1) $res=(expr2); else $res=(expr3); але природно б льш лакон чна.

Авласне об цьому йусіх. Ми розглянули всі операції, що єу PHP. Наступним кроком розглянемо керуючі структури (чи їхній ще можна назвати командами).

КЕРУВАННЯ

IF

Структура: if (вираження)

блоквиконання Приклад використання: if ($a > $b)

print "a більше, ніж b";

if ($a > $b) {

print "a б льше, н ж b";

$b = $a;

}

ELSE

Приклад використання: if ($a > $b) {

print "a б льше, н ж b";

} else {

print "a не б льше, н ж b";

}

elseif

Цікавий оператор. Він застосовується увипадку, коли вам необхідно використовувати IF відразу після ELSE

Приклад використання: if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else {

print "a is smaller than b";

}

if(): ... endif;

Теж досить незвичайна структура. Зміст її вті м що якщо умова, записана вкруглих скобах оператора IF виявилося щирої, то буде виконуватися весь код, починаючи в д двокрапки ':' те команда END IF; Приклад використання: <?php if ($a==5): ?> A = 5

<?php endif; ?>

Чи от ще з використанням вищеописаного оператора ELSEIF if ($a == 5): print "a equals 5";

print "...";

elseif ($a == 6):

print "a equals 6";

print "!!!"; else:

print "a is neither 5 nor 6"; endif; WHILE Структура:

while (вираження): блоквиконання ... endwhile; 1 приклад:

$i = 1;

while ($i <= 10) { print

}

do.. while

H ічого незвичайного - цикл, як цикл. Виконується блок виконання доти, поки справедливе

вираження. Структура:

do блоквиконання while (вираження);

FOR

Точно такий цикл як і в C++. Структура: for (вираження 1; вираження 2; вираження 3)

блоквиконання Хоча - немає. Єв PHP ще одне доповнення. Структура: for (вираження1; вираження2; вираження3):

блоквиконання; endfor; Зверн ть увагу, на двокрапку перед блоком виконання. break

Старе як св іт. Цей оператор дозволяє вискакувати збудь-якого циклу (for, while, do.. while) до закінчення його виконання. Приклад:

$i = 0;

while ($i < 10) {

if ($arr[$i] == "stop") { break;

}

$i++;

}

continue

Теж нічого нового. Цей оператор дозволяє пропустити подальше дії блоку виконання будь-якого циклу продовжити виконання зновогокола. Приклад: while (вираження) { if (вираження2) continue;

д я;

};

Така програма аналог чна наступної, без використання continue: while (вираження) { if (! вираження2) д я;

};

switch

Часто дуже необхідний оператор вибору. Хоча всі його і так знають, спробую представити ясний приклад. Допустимо увас є наступний д ілянка впрограмі :

if ($i == 0) { print "i дор внює 0";

} else

if ($i == 1) {

print "i дор внює 1"; } else

if ($i == 2) {

print "i дор внює 2"; } else

print " жодна умова не пройшла"

Заощадити час виконання даної д ілянки, атакож представити його більш логічним способом і допоможе нам цей оператор. Наступний приклад робить дії, аналогічні попередньому, але вбільш красив й форм : switch { case 0: print "i дор внює 0"; break; case 1:

print "i дор внює 1"; break; case 2:

print "i дор внює 2"; break; default:

print " жодна умова не пройшла"

І

утакім представленні є і ще одна перевага. Якщо не поставити оператор break наприклад перед case 1:, то увипадку, коли $1 буде дор внює нулю п сля висновку на екран пов домлення про це програма піде далі і виведе також пов ідомлення про те, що $I дорівнює ще і 1 і тільки після, зустр вши break; продовжить своє виконання за межами switch require

Цей оператор діє приблизно такеж як і #include у C++. Файл, зазначений улапках включається в

скрипт і виконується, але тільки один раз. Уфайлі, що включається оператором require резонно

зберігати якісь дані, необхідні для багатьох скриптів і включають його вці скрипти. Структура

його така:

require 'header.inc';

include

Структура:

include 'func.inc';

Цей оператор дозволяє включати код, що міститься в зазначеному файлі (func.inc унашомувипадку) і виконуватийого стільки разів, скільки програма зустрічає цей оператор Тобто. Наприклад уфайлі func.inc унас зберігається програмависновку на екран визначених параметрів Ну і щораз, коли нам потрібно буде виводити ці параметри ми будемо вставляти втекст нашої основної програми include 'func.inc', тобто це в принцип теж саме, якби ми усюди втаких випадках вставили текст, що єуфайл func.inc Зверніть увагу. P ізниця між include і require досить істотна.