Меню

Уроци

Влез Излез

Първи стъпки в PHP – част 2

В предния урок споменахме за основните типове променливи в PHP. Тук ще разгледаме някои основни операции и особености свързани с тях.

Няма да се впускам в особени обяснения за услвия и др подобни, които са кажи-речи еднакви във всички C-базирани езици и вече би трябвало да ги знаете от JavaScript уроците.

Да започнем с това, че променлива в PHP се инициализира още в момента, в който за първи път й зададем стойност.

Ако дори и да се опитаме да използваме променлива в сравнение или друга операция, преди тя да е била инициализирана, това няма да прекрати script-а ни, но все пак ще хвърли грешка от тип Notice. Повечето сървъри са настроени така, че изобщо да не показват този тип грешки, но е въпрос на качествено програмиране да не ги генерираме.

Ако имаме:

<?php
echo $a;
?>

Това ще даде грешка: Notice: Undefined variable: a in file.php on line 2

Правилният начин да го направим е:

<?php
$a = 'Hello World';

echo $a;
?>

Резултатът ще бъде изписването на текста „Hello World“.

Какво точно прави „echo„?

Това е команда, която конвертира към тип string всичко, което е изписано след нея и го извежда. Под „извежда“ се има предвид, че ако вмъкнем този код в някоя HTML страница, след изпълнението му, на мястото ще бъде изведен този текст. Така че, ако имаме:

<h1><?php echo 'Hello World!'; ?></h1>

Това, което ще стигне до браузъра след парсирането на PHP кода от сървъра е:

<h1>Hello World!</h1>

Конкретно този пример е малко безсмислен, тъй като няма нужда от PHP за да изпишем този текст, но ако той беше генериран програмно използвайки база данни или нещо друго, тогава вече щяхме да можем да сменяме това заглавие.

За да го направим малко по-интересно можем да използваме подаване на променливи към script-а чрез URL, през който го достъпваме.

Ако страницата ни е на http://localhost/test.php, то можем да подадем GET аргумент като добавим „?“ след URL-а на страницата (това отделя query частта в цялостния URL) и след това напишем ключ на променлива, последвата от знак за равенство и стойност. Нещо такова: http://localhost/test.php?name=Georgi

Подобни GET аргументи можем да достъпим през PHP с помощща на $_GET суперглобалната променлива, чиито тип е масив.

Преди да покажем нов пример, който да използва GET аргументи, нека кажем няколко думи за синтаксиса на PHP относно масивите.

Нов масив се създава чрез функцията array(). Стойностите на масива се изреждат чрез запетаи:

$my_array = array(1, 2, 3, 4);

Можем да добавим нов елемент към масива по следния начин:

$my_array = array(1, 2, 3, 4);
$my_array[] = 5;

Това ще добави пети елемент към масива.

Масивите в PHP не са ограничени да съдържат елементи само от един и същ тип, така че в един масив можем да имаме и числа, и булеви стойности, и низови литерали, и други масиви, и каквото си поискаме:

$my_array = array(1, 2.5, true, 'some string', array('second', 'array', 'inside', 'the', 'first', 'one'));

За да достъпим даден елемент от масива използваме квадратни скоби и индексът на елемента, който искаме да достъпим. Не забравяйте, че бройката е с 0-лев индекс, така че първия елемент е [0]:

$colors = array('red', 'green', 'blue');
echo $colors[1]; // това ще изведе "green"

В PHP съществува и друг тип масиви – асоциативни. Това позволява индексите да не са само числа, но и string-ове:

$colors = array('red' => '#FF0000', 'green' => '#00FF00', 'blue' => '#0000FF');

Когато описваме кой индекс каква стойност да получи използваме знаците „=>“ както се вижда в примера по-горе. В него сме използвали имената на цветовете като ключове, а стойността на елемента от масива с даден ключ е HEX репрезентация на дадения цвят.

$_GET суперглобалната променлива е асоциативен масив, чиито елементи са query параметрите от URL-а на текущата страница. Така че ако разгледаме пак описания по-горе URL: http://localhost/test.php?name=Georgi в този случай в $_GET бихме имали елемент с ключ „name“, чиято стойност е „Georgi“:

if ($_GET['name'] == 'Georgi') {
	echo 'Hello Georgi!';
} else {
	echo 'Hello Stranger';
}

Горният пример ще изведе „Hello Georgi“, ако използваме примерния URL.

За да го направим по-интересно можем да програмираме script-а да казва „Hello“ и въпросното име, каквото и да е то. За целта тряба да конкатенираме string-овете.

В PHP това се прави не чрез „+“, като в повечето други C-базирани езици, а с точка – „.“:

echo 'Hello' . $_GET['name'];

PHP има възможност да покаже стойността на дадена променлива, ако сме я вписали директно между двойни кавички. Наблягам на това, че кавичките трябва да са двойни, а не единични като в горния пример.

Макар в другите езици да няма разлика между низове с единични и двойни кавички, в PHP единични ще покажат точно каквото има в тях, а двойните ще изведат стойността на променлива, ако такава е била подадена.

Двойните кавички имат и други особености – те парсират и знак за нов ред – „\n“ или таб – „\t“. Ако изпишем тези в единични кавички, то ще видим просто същите знаци.

Ако в израз с двойни кавички искаме да включим друга двойна кавичка, или аналогично с единични, можем да я escape-нем с „\“:

<?php
echo 'Say \'Hi\'';
echo "Say \"Hello\"";
?>

С тези знания можем да променим горния script на:

$name = $_GET['name'];
echo "Hello $name";

Защо първо имаме $name = $_GET['name']?

Заради квадратните скоби и единичната кавичка в масива. Като цяло тези специални знаци са малко проблемни за парсъра на двойни кавички и затова първо задаваме стойността на друга променлива и използваме нея в string-а.

За щастие има и по-лесен начин, просто трябва да оградим променливата във фигурни (големи) скоби:

<?php
echo "Hello {$_GET['name']}!";
?>

До тук добре, но ако в момента отворим страницата без да го има „name=Georgi“ (или някакво друго име в URL-а) ще видим следвата грешка: Notice: Undefined index: name in test.php on line 2

Това е защото суперглобалната променлива $_GET няма индекс „name“, съответно нямаме декларирана променлива.

На production сървъри тази грешка няма да се види, но пак ще останем с текст „Hello !“ (заедно с интервала), без да го има самото име, което не е каквото искаме.

Затова нека направим проверка дали наистина са ни подали очаквания аргумент или трябва да изведем друг текст:

<?php
if (isset($_GET['name'])) {
	echo "Hello {$_GET['name']}!";
} else {
	echo 'Hello!';
}
?>

С помощта на функцията isset правим проверка дали наистина имаме очакваната променлива. Ако условието върне true всичко е наред и казваме „Здравей“ на името, което ни е подадено по URL. Ако обаче нямаме подобно подадено име, то тогава използвайки $_GET['name'] ще изведе грешка, а ние не искаме това. В такъв случай просто казваме едно общо „Здравей“, без да се обременяваме с име.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax