Упражнение 3. Основни елементи на РНР синтаксис на езика, константи, променливи, изрази, оператори... Показване на текст в браузъра Да се създаде една PHP страница, със стандартни HTML <head>, <title> и <body> tags. Това не е задължително необходимо, но е добра практика. Съхранете файла с разширение.php. В <body> tag, създайте една PHP секция, която извежда съобщение Hello World! в прозореца на браузъра. Вашият код е нещо подобно на: <html> <head> <title>hello, World!</title> </head> <body> echo "Hello, World!"; // Вместо echo може да използвате print. phpinfo(); </body> </html> PHP може да се вгради многократно в един HTML документ. Например сега ще изведем заглавието на страницата чрез PHP код: <html> <head> <title> echo "Hello, Boys and Girls!"; </title> </head> <body> echo "Hello, World!"; </body> </html> 1
Примерът по-долу е аналогичен по резултат на горния, но демонстрира как може да се вгради HTML код в PHP скрипт. echo "<HTML> <HEAD> <TITLE>Hello, Boys and Girls!</TITLE> </HEAD> <BODY> <b>hello, World!</b> </BODY> </HTML>"; Символни низове Символните низове в PHP могат да се ограждат с кавички и с апостроф: <html> <head> <title> echo "Hello, Boys and Girls!"; </title> </head> <body> echo "Hello, World!"; //в кавички echo ("Hello, World!"); //можете да използвате и скоби echo 'Hello, World!'; //в апостроф echo ('Hello, World!'); //можете да използвате и скоби // Използване на print print "Hello, world! "; print ("Hello, world! "); print 'Hello, World!'; print ('Hello, World!'); </body> </html> echo() vs. print() Това са езикови конструкции, а не функции въпреки, че print() се държи като функция връща стойност. Параметри: echo "Hello, World!","Hello, World!"; // ok echo (expression), (expression), (expression); // ok 2
echo (expression string, expression string ); // fail print (expression string); // ok, тоест print() приема само един параметър (израз стринг) print (expression), (expression), (expression); // fail Изводи: Когато стринга (символен низ, литерал) е поставен в кавички, вие можете да включите и имена на променливи в него. Кавичка в такъв низ се представя с \". Когато стринга (символен низ, литерал) е поставен в апострофи обаче и включите променлива в него няма да се отпечата стойността на променливата, а нейното име, тоест - резултатът няма да е такъв какъвто бихме очаквали!!! Апостроф в низове от последния тип се представя като \. Точката (.) в оператори print и echo е оператор за конкатениране. print ("10-7="). (10-7). "<br>"; //Извежда: 10-7= 3 $name="иван Иванов";echo "Здравей, ".$name."<br>"; //Здравей, Иван Иванов print "He's name is \"$name\""; //He's name is "Иван Иванов" Задача: Самостоятелно: Използвайки само само echo/print изведете в прозореца на браузъра следното: Сума: 10 + 7 = 17 Разлика: 10-7 = 3 Произведение: 10 * 7 = 70 Частно: 10 / 7 = 1.4285714285714 Остатък от деление: 10 % 7 = 3 Примерна реализация: <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <TITLE>echo/print</TITLE> </HEAD> <BODY> <? echo ("10+7="), (10+7), "<br>"; //ok echo ("10-7="), (10-7), "<br>"; //ok echo ("10*7="), (10*7), "<br>"; //ok echo ("10/7="), (10/7), "<br>"; //ok echo ("10%7="), (10%7), "<br>"; //ok print ("10+7="). (10+7). "<br>"; //ok print ("10-7="). (10-7). "<br>"; //ok print ("10*7="). (10*7). "<br>"; //ok print ("10/7="). (10/7). "<br>"; //ok print ("10%7="). (10%7). "<br>"; //ok </BODY> </HTML> Операции в PHP: аритметични - +, -, *, /, % логически: && и and (лигическо И), и or (логическо ИЛИ),! (не) за сравнение: ==,!=. >, <, >=, <=, ===(идентично на),!==; и др. 3
Скриптът по-долу създава две променливи $x=10 и $y=7 и изчислява и извежда сумата, разликата, произведението, частното и остатъка от делението им в прозореца на браузъра по следния начин: 10 + 7 = 17 10-7 = 3 10 * 7 = 70 10 / 7 = 1.4285714285714 10 % 7 = 3 $x=10; $y=7; $result=$x+$y; echo "$x + $y = $result<br />"; $result=$x-$y; echo "$x - $y = $result<br />"; $result=$x*$y; echo "$x * $y = $result<br />"; $result=$x/$y; echo "$x / $y = $result<br />"; $result=$x%$y; echo "$x % $y = $result<br />"; 10 + 7 = 17 10-7 = 3 10 * 7 = 70 10 / 7 = 1.42857142857 10 % 7 = 3 Константи в PHP: define( име_на_константа, стойност[, чувствителност_към_регистъра]) където: име_на_константа е низ; стойност е валиден РНР израз, но не масив или обект; чувствителност_към_регистъра е булева стойност ( true/ false ) и е незадължителна. Подразбиращата стойност е false (чувствителен). Проверка за дефинирането на константа може да стане чрез функция defined("име на константа"). Стойността на една константа се извлича чрез името и, но също така и чрез функция constant("име на константа"). Логическите константи имат стойности TRUE и FALSE. Съществуват и магически константи, чиито стойности се променят в зависимост от това къде се изпозват: например LINE връща номера на програмния ред, в който се съдържа. echo LINE ; Например echo FILE ; връща спецификацията на файла на php модула, във вида: C:\xampp\htdocs\exercice\listing1_3_2.php; РНР предоставя функцията get_defined_constants(), която връща асоциативен масив, който съдържа двойки < име, стойност > за всички декларирани константи. За доброто извеждане на масива е добре да използваме Html <pre> - таг за преформатиране: Пример 1: Разгледайте всички декларирани константи <pre> 4
print_r(get_defined_constants()); </pre> Array ( [E_ERROR] => 1 [E_RECOVERABLE_ERROR] => 4096 [E_WARNING] => 2... Пример 2: Дефиниране на потребителски константи // дефинираме константа // PASSWORD define("password","qwerty"); //дефинираме константа независима от регистъра // PI със стойност 3.14 define("pi","3.14", True); // извеждаме стойността на PASSWORD, // т.е. qwerty echo "PASSWORD =".PASSWORD; echo "<br>password ="; echo constant("password"); //echo "password=".password; /* извежда предупреждение, че password e регистър-зависима константа PASSWORD */ if (defined("password")) echo "password=".password; else echo "constant passoword is not defined!"; echo "pi=".pi; // извежда 3.14, безпроблемно // тъй като константа PI е независима от регистъра PASSWORD =qwerty PASSWORD =qwerty constant passoword is not defined! pi=3.14 Променливи в PHP създаване и използване Първо трябва да знаете, че променливите в PHP не се декларират явно, типа им зависи от присвоената стойност. Пред променливите в РНР се поставя знака $ и могат да започват с долна черта или буква, като могат да съдържат букви и цифри и знак за подчетаване. Чувствителни са към главни и малки букви. Инициализацията на променливите не е задължителна, но се счита за добра практика. Стойността на неинициализираните променливи зависи от контекста в който се използват. Така по подразбиране за променливите от логически тип подразбиращата се стойност е FALSE, за числов тип (integer, float) 0, за тип string празен низ, за масив (тип array) празен масив. Инициализиране на променливи може да се прави: 5
със стойност ( $у = $х ), с адрес ( $у = &$х ) или индиректно: съдържанието на променливата се използва като име на променлива ($x = 'Peter'; или $x = "Peter"; $$x = 'John'; echo $Peter; //ще изведе John ). При това съдържанието на променливата трябва да е символен низ, който да отговаря на изискванията за име на променлива. В този пример променливата $x получава стойност 'Peter'. Чрез инструкцията $$x = 'John'; всъщност се създава нова променлива с име, равно на съдържанието на променливата $x, тоест създава се променлива с име $Peter = 'John'. Ето защо резултатът от последната инструкция echo $Peter; дава John. Последната възможност не се среща в други езици и е едно от големите предимства на PHP. Деклариране и инициализация на променливи $a = 'Nora'; $y=$a; //инициализация със стойност $name='maria'; $z = &$name; //инициализация с адрес echo "a=",$a," y=",$y, " z=",$z; $x = 'Peter'; //индиректна инициализация - съдържанието на променливата $x се използва като име на променлива $$x = 'John'; //създава се $Peter='John' echo " x=".$x." Peter=".$Peter; //$Peter ще изведе John a=nora y=nora z=maria x=peter Peter=John Локален vs. глобален обхват на променливите - примери Независимо, че създаваните от потребителя функции в PHP са обект на разглеждане в друго упражнение, ще подчертаем, че променливи, декларирани вътре в дадена функция са с локална за функцията видимост. Достъпът до външна променлива от дадена функция може да стане и чрез масива $GLOBALS, който съдържа референция към всички променливи с глобален обхват или като се декларира променливата като global: function my_finc() { global $a; echo $a; //Извежда 1 echo $b; //локален обхват, извежда Notice: Undefined variable... } $a = 1; $b=2; echo $a; // Извежда 1 echo $b; // Извежда 2 my_finc(); Достъпът до външна променлива може да стане и чрез масива $GLOBALS, който съдържа референция към всички променливи с глобален обхват 6
$a = 1; $b = 2; function Sum() { $GLOBALS['b'] += $GLOBALS['a'];} Sum(); echo $b; //3 Управление на променливите: isset (var) - връща TRUE, ако променливата var е установена (тоест не и е зададена стойност) и не е NULL и FALSE - в противен случай. Може да се използва и за повече от една променлива - връща TRUE, ако всички променливи са установени; empty (var) връща TRUE, ако променливата няма стойност (променливата не е установена или има стойност: 0,0.0,"0",, FALSE, NULL, празен масив). unset ( var1, var2,.) унищожава се стойността на специфицираната променлива. Поведението на unset() във функция варира в зависимост от това какъв тип променлива искате да унищожите. Ако глобална променлива се унищожава с unset() вътре във функцията, само локалната променлива се разрушава, а променливата в викащата функция не губи стойността си: isset/unset/empty <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title></title> </head> <body> $my_name = 'Иван Иванов'; if (isset($my_name)) echo "Казвам се $my_name!<br>"; // унищожаваме се стойността на променливата $my_name unset($my_name); if (isset($my_name)) echo "Казвам се $my_name!<br>"; else echo "Променливата my_name няма стойност!!!<br>"; if (empty($my_name)) {echo "The variable my_name is empty<br>";} else {echo " The variable my_name is Not empty<br>";} </body> </html> Казвам се Иван Иванов! Променливата my_name няма стойност!!! The variable my_name is empty Проверка на типа на дадена променлива: gettype(),is_type(var) Mожете да проверите от какъв тип данни е една променлива като използвате вградената PHP функция gettype(). Вижте примера: 7
$my_var = 'George'; $my_var = 88.9; $my_var = true; $my_var = 8; $my_var = null; Value is string. Value is double. Value is boolean. Value is integer. Value is NULL. За проверка за типа на променлива: bool is_type(var); - is_bool() - проверява дали дадена променлива е от булев тип. Връща true, ако променливата е от тип bool. Аналогично: - is_numeric() - проверява дали дадена променлива е от числов тип - is_int() - проверява дали дадена променлива е от целочислен тип - is_float() - проверява дали дадена променлива е от тип float - is_string() - проверява дали дадена променлива е от тип string - is_null() - проверява дали дадена променлива е "празна" - is_array() - проверява дали дадена променлива е масив - is_object() - проверява дали дадена променлива е обект "Променливи на средата" или "променливи на обкръжението" (environment variables). Чрез тези променливи може да се извлече всевъзможна информация за посетителя на една страница: от кой web адрес е дошъл, какъв е IP адреса му, каква операционна система и браузър използва и т.н. Найизползваните такива променливи са следните: $_SERVER['HTTP_USER_AGENT'] - дава информация за браузъра и ОС $_SERVER['REMOTE_ADDR ] - дава информация за IP адреса $_SERVER['SERVER_SOFTWARE'] - дава информация за сървъра $_SERVER['HTTP_REFERER'] - дава информация за URL, откъдето идва user-a. Много примери може да намерите на: http://www.w3resource.com/php/super-variables/$_server.php echo "SERVER_NAME=".$_SERVER['SERVER_NAME']; echo "PHP_SELF=".$_SERVER['PHP_SELF']; echo "SERVER_ADDR=".$_SERVER['SERVER_ADDR']; echo "REMOTE_ADDR=".$_SERVER['REMOTE_ADDR']; 8
echo "Вашия web сървър е ".$_SERVER['SERVER_SOFTWARE']; echo "Вашите браузър и операционната система са ".$_SERVER['HTTP_USER_AGENT']; if(isset($_server['http_referer'])) { echo "идвате от "; echo $_SERVER['HTTP_REFERER'];} Задача: Създайте скрипт който декларира една променлива num с начална стойност 8 и дава следния изход. Value is now 8. Add 2. Value is now 10. Subtract 4. Value is now 6. Multiply by 5. Value is now 30. Divide by 3. Value is now 10. Increment value by one. Value is now 11. Decrement value by one. Value is now 10. Задача. Създайте скрипт, който използва HTML форма за въвеждане на името на потребителя, например Иван. След натискане на бутон се извежда следния отговор Здравей, Иван 9