Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Как PHP работает



Нужно соблюсти несколько требований, чтобы сервер мог выполнять программы на PHP. Расширение файла, содержащего код, может быть PHP, HTM, HTML или PHTML. В конфигурационном файле WEB-Сервера Apache необходимо добавить директиву обработки этого типа файлов: AddType. Для функционирования PHP сам препроцессор должен быть установлен на сервере в одном каталоге вместе с Apache. Необходимо загрузить Веб-сервер Apache, затем сервер MySql. Загрузить браузер и в окне набрать адрес www.localhost/name.php.

Код PHP может быть оформлен следующими способами:

<?php //стиль xml

//php инструкции

?>

В сокращенном варианте символы php после вопросительного знака отсутствуют, каждый скрипт открывается тегом <? и закрывается?>. После этого скрипт может сохранятся и исполнятся в виде файла с расширением.php или помещаться внутрь html –документа.

Пример простого файла с PHP:

<!—pr0.php -->

<html>

<head> </head>

<script language="php">

print "Hello,world-Первый способ вставки кода PHP<BR>";

</script>

<body>

Вставка кода PHP внутрь документа Html<BR>

<?

print "Hello, to you - второй способ вставки кода PHP<BR>";

?>

<?php

echo "А это внутри PHP - третий способ вставки кода PHP<BR><HR>";

phpinfo(); //возвращает много информации о версии

// и настройках php

?>

</body>

</html>

Вывод:

Hello,world-Первый способ вставки кода PHP

Вставка кода PHP внутрь документа Html

Hello, to you - второй способ вставки кода PHP

А это внутри PHP - третий способ вставки кода PHP

Как видно из примера, скрипт PHP, содержащий команду echo, внедрен внутрь HTML документа. Оператор echo (string arg1, string arg2, string argn) выводит все параметры. Для вывода в PHP могут использоваться операторы вывода print, аналогичные echo(). С операторами print() и echo() не обязательно использовать скобки. Скобки должны быть обязательно использованы для оператора форматированного вывода: printf(“format”, arglist).

PHP позволяет использовать такие структуры:

<?php //pr1.php

$exp=true;

if ($exp) {

?>

<strong>Это истина.</strong>

<?php

}

else {

?>

<strong>Это ложь.</strong>

<?php

}

printf("<br> %s", "Выход из режима интерпретации позволяет вывести большой текст");

?>

Вывод:

Это истина.

Выход из режима интерпретации позволяет вывести большой текст.

Когда PHP встречает закрывающие теги?>, он просто выводит все, что он находит до следующего открывающего тега. Приведенный в примере выход из режима интерпретации PHP для вывода больших блоков текста более эффективен, чем отправка текста через echo() или print().

Типы данных

PHP поддерживает 4 скалярных типа данных: boolean (значения true и false), integer (значения целые числа, которые могут быть десятичными, восьмеричными и шестнадцатиричными), float (вещественные числа с плавающей точкой типа double), string(в одинарных и двойных апостофах) и два составных типа: array и object. Кроме этого имеется два специальных типа: resource и NULL. Перед целыми восьмеричными значениями записывается нуль, перед шестнадцатеричными – 0x. Рассмотрим пример

<?php //pr01.php

$a = 10;

$b = 020;//восьмеричное значение

$c = 0x41;//шестнадцатеричное значение

$d=3.62e+2;

printf("%d %o %c %f",$a,$b,$c,$d);

?>

Вывод:

10 20 A 362.000000

Здесь %d – формат для десятичного целого, %o – для восьмеричного, %c – для вывода символа с указанным кодом, %f - для вывода вещественных значений.

Если необходимо проверить тип и значение определенного выражения, можно использовать var_dump(). Если же для отладки необходимо просто удобочитаемое представление типа, используйте gettype(). Чтобы проверить выражение на определенный тип, применяйте для этого функцию is_ type().

Имена всех переменных начинаются знаком $. PHP не требует явного определения типа при объявлении переменной, тип переменной определяется по присвоенному ей значению. То есть, если присвоить переменной $p строковое значение, $p становится строкой. Если затем присвоить переменной $p значение целого числа, то $p станет целым.

Для инициализации переменной в PHP ей просто присваивается значение. Кроме переменных могут быть использованы поименованные константы, объявленные в операторе define() без знака $. Рассмотрим пример:

<?php //pr2.php

define("d",5,true);

$a = "Добро пожаловать ";

$b = "в PHP";

$c = 4;

$c++;

echo "$a$b$c"; //получим - Добро пожаловать в PHP5

print d;//Вывод константы 5

$p=NULL;

print var_dump($p);

print gettype($a);

?>

Вывод:

Добро пожаловать в PHP55NULL string

Комментарии в PHP используются, как и в C++:

/*многострочный комментарий */ или

// однострочный комментарий или

#еще один однострочный комментарий.

Строки

Строки являются последовательностями символов, каждый символ соответствует байту. Это означает, что PHP не имеет встроенной поддержки Unicode. Некоторую поддержку Unicode обеспечивают функции utf8_encode() и utf8_decode(). Переход на кодировку Unicode запланирован в версии PHP6.

В PHP не существует ограничения на размер строк. Строковые значения могут присваиваться переменным. В PHP строковый литерал можно представлять следующими способами: строки в одиночных кавычках и строки в двойных кавычках. Строка, заключенная в двойные ковычки может содержать подстроку в одинарных ковычках и наоборот. Строка, заключенная в двойные кавычки, означает, что встречающиеся в этой строке переменные будут заменены их значениями. Если строка заключена в одинарные кавычки, такая замена не производится, так как такая строка не разбирается в PHP.

<?php //pr3.php

$name = 'Domine?';

$name_1 = "Quo vadis, $name";

$name_2 = ' Quo vadis, $name';

echo "$name_1"; // выведет - Quo vadis, Domine?

echo "$name_2"; // выведет - Quo vadis, $name

?>

Для строк в двойных кавычках PHP поддерживает также больше так называемых экранированных символов, которые могут встречаться среди символов строки: \n - перенос строки, \r- возврат каретки, \t- горизонтальная табуляция, \\- обратная косая черта, \$- знак доллара, \\"- двойная кавычка, \код – код символа.

Например:

$s=”\x41- это символ ‘a’ ”;

$st=” можно использовать \” управляющий \” символ”;

Самым важным свойством строк в двойных кавычках является обработка переменных, находящихся в строках.

Третий способ определения строк - это использование heredoc-синтаксиса ("<<<"). После <<< указывается идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий строку. Закрывающий идентификатор должен начинаться в первом столбце строки. Строка с закрывающим идентификатором не содержит других символов, за исключением, точки с запятой (;). Это означает, что идентификатор не должен вводиться с отступом и не может быть никаких пробелов или знаков табуляции до или после точки с запятой. Первым символом перед закрывающим идентификатором должен быть символ новой строки. Например, \r. Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что нет необходимости экранировать кавычки в heredoc, но по-прежнему можно использовать управляющие последовательности. Пример определения heredoc-строки:

<?php

$name = "Max";

$str = <<<DEMO

Hello $name! <br/>

This is a demo message

with heredoc.

DEMO;

echo $str;

?>

Вывод:

Hello Max! This is a demo message with heredoc.

Если строка определяется в двойных кавычках, либо при помощи heredoc, переменные внутри нее обрабатываются. Существует два типа синтаксиса: простой и сложный. В простом синтаксисе если интерпретатор встречает знак ($), он захватывает столько символов, сколько можно, чтобы сформировать правильное имя переменной. Чтобы точно определить конец имени, заключайте имя переменной в фигурные скобки.

<?php

$beer = 'Речицкое';

echo "$beer's taste is great"; /* работает, 's - неверный символ для имени переменной */

echo "He drank some $beers"; /* не работает, 's' это верный символ для имени переменной*/

echo "He drank some ${beer}s"; // работает

echo "He drank some {$beer}s"; // работает

?>

Сложный (фигурный) синтаксис позволяет использовать сложные выражения.

Фактически, вы можете включить любое значение, находящееся в пространстве имени в строке с этим синтаксисом. Вы просто записываете выражение таким же образом, как и вне строки, а затем заключаете его в { и }. Поскольку вы не можете экранировать '{', этот синтаксис будет распознаваться только когда $ следует непосредственно за {. Поясняющий пример:

<?php

// Давайте покажем все ошибки

error_reporting(E_ALL);

$great = 'fantastic';

// Не работает, выведет: This is { fantastic}

echo "This is { $great}";

// Работает, выведет: This is fantastic

echo "This is {$great}";

echo "This is ${great}";

// Работает

echo "Этот квадрат шириной {$square->width}00 сантиметров.";

// Работает

echo "Это работает: {$arr[4][3]}";

// Это неверно по той же причине, что и $foo[bar] неверно вне

// строки. Другими словами, это по-прежнему будет работать,

// но поскольку PHP сначала ищет константу foo, это вызовет

// ошибку уровня E_NOTICE (неопределенная константа).

echo "Это неправильно: {$arr[foo][3]}";

// Работает. При использовании многомерных массивов, внутри

// строк всегда используйте фигурные скобки

echo "Это работает: {$arr['foo'][3]}";

// Работает.

echo "Это работает: ". $arr['foo'][3];

echo "Вы даже можете записать {$obj->values[3]->name}";

echo "Это значение переменной по имени $name: {${$name}}";

?>

В PHP существуют так называемые обратные ковычки (‘), унаследованные из языка Perl. Заключенные в них строки воспринимаются и выполняются как команды операционной системы. Например

<?php

echo ‘dir’;?>

Массивы и инициализация массивов

Система PHP поддерживает массивы с числовыми индексами и ассоциативные массивы, в качестве индексов которых используется символьная строка.

Индексы массивов задаются в квадратных скобках и изменяются начиная с 0:

$massiv[0] = 'name';

$massiv[1] = 'phone';

Ассоциированные массивы (хэши) используют в качестве индексов строковые значения-ключ.

$new_massiv['name'] = 'Valera';

$new_massiv['email'] = '[email protected]';

Массив может инициализироваться одним из двух способов: последовательным присвоением значений, или посредством конструкции array(). При последовательном добавлении значений в массив, просто записываются значения элементов массива, используя пустой индекс. При этом каждое следующее значение будет добавляться в качестве последнего элемента массива.

$massiv[] = "третий"; //$massiv[2] = " третий "

$massiv[] = "четвертый";//$massiv[3] = " четвертый "

Второй способ создания массива реализуется путем вызова функции array():

$massiv = array('one','two','three');

Для ассоциированных массивов такой вызов будет иметь вид:

$new_massiv = array('name' => 'nobody', 'email' => '[email protected]');

Между индексом и значением помещается здесь знак =>. Рассмотрим пример:

<?php //pr45

$massiv = array('one','two','three');

$massiv[5]="5";

$massiv[6]="6";

$massiv[]="7";

print_r($massiv);

$new_massiv = array('name' => 'nobody', 'email' => '[email protected]');

print_r($new_massiv);

print $new_massiv['name']

?>

Результат:

Array ([0] => one [1] => two [2] => three

[5] => 5 [6] => 6 [7] => 7)

Array ([name] => nobody [email] => [email protected])

nobody

Функция print_r() используется для вывода всего массива.

PHP включает также ряд предопределенных или глобальных массивов. Их называют также суперглобальными переменными, так как они всегда присутствуют и доступны для всех блоков сценария PHP. Ниже показаны обычно используемые суперглобальные переменные PHP:

$_GET[]

$_POST[]

$_REQUEST[]

$_COOKIE[]

$_FILES[]

$_SERVER[]

$_ENV[]

$_SESSION[]

Следующий пример выполняет вывод значений элементов суперглобального массива $_SERVER

<?php //pr46

//print_r($_GET);

//print_r($_POST);

//print_r($_REQUEST);

//print_r($_COOKIE);

//print_r($_FILES);

print_r($_SERVER);

//print_r($_ENV);

//print_r($_SESSION);

?>

Результаты:

Array

(

[COMSPEC] => C:\WINDOWS\system32\cmd.exe

[DOCUMENT_ROOT] => z:/home/localhost/www

[HTTP_ACCEPT] => image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

[HTTP_ACCEPT_ENCODING] => gzip, deflate

[HTTP_ACCEPT_LANGUAGE] => ru

[HTTP_CONNECTION] => Keep-Alive

[HTTP_HOST] => localhost

[HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 2.0.50727)

[PATH] => \usr\local\ImageMagick;\usr\local\php5; C:\PROGRA~1\Borland\CBUILD~1\Bin; C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl; C:\WINDOWS\system32; C:\WINDOWS; C:\WINDOWS\System32\Wbem

[REMOTE_ADDR] => 127.0.0.1

[REMOTE_PORT] => 1071

[SCRIPT_FILENAME] => z:/home/localhost/www/myprimers/pr44.php

[SERVER_ADDR] => 127.0.0.1

[SERVER_ADMIN] => webmaster@localhost

[SERVER_NAME] => localhost

[SERVER_PORT] => 80

[SERVER_SIGNATURE] => <ADDRESS>Apache/1.3.33 Server at <A HREF="mailto:webmaster@localhost">localhost</A> Port 80</ADDRESS>

[SERVER_SOFTWARE] => Apache/1.3.33 (Win32) PHP/5.1.6

[SystemRoot] => C:\WINDOWS

[WINDIR] => C:\WINDOWS

[GATEWAY_INTERFACE] => CGI/1.1

[SERVER_PROTOCOL] => HTTP/1.1

[REQUEST_METHOD] => GET

[QUERY_STRING] =>

[REQUEST_URI] => /MyPrimers/pr44.php

[SCRIPT_NAME] => /MyPrimers/pr44.php

[PATH_TRANSLATED] => z:/home/localhost/www/myprimers/pr44.php

[PHP_SELF] => /MyPrimers/pr44.php

[REQUEST_TIME] => 1196893515

[argv] => Array

(

)

[argc] => 0

)

Массив $_ENV содержит переменные среды окружения, как и в С++. Другие суперглобальные переменные PHP будут описаны в дальнейшем.

Операции и выражения

Таблица Арифметические операции

Пример Результат
$a + $b Сумма $a и $b.
$a - $b Разность $a и $b.
$a * $b Произведение $a и $b.
$a / $b Частное от деления $a на $b.
$a % $b Целочисленный остаток от деления $a на $b.

Операция деления ("/") всегда возвращает число с плавающей точкой, даже если операнды являются целыми числами (или строками, которые конвертируются в целые числа).

Битовые операции

Битовые операции дают возможность устанавливать значение битов для целых чисел. Если операнды являются строками, битовая операция выполняется над символами строки.

Таблица. Битовые операции

Пример Имя Результат
$a & $b And Устанавливаются биты, которые установлены и в $a, и в $b.
$a | $b Or Устанавливаются биты, которые установлены в $a или в $b.
$a ^ $b Xor Устанавливаются биты, которые установлены в $a или $b, но не в обоих.
~ $a Not Устанавливаются биты, которые в $a не установлены, и наоборот.
$a << $b Сдвиг влево Сдвигает биты переменной $a на $b шагов влево.
$a >> $b Сдвиг вправо Сдвигает биты переменной $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 <= $b меньше или равно TRUE, если $a меньше или равно $b.
$a >= $b больше или равно TRUE, если $a больше или равно $b.

Условной операцией является операция?формата: (expr1)? (expr2): (expr3). При этом значение выражения равно expr2, если expr1=TRUE, и expr3, если expr1= FALSE.

Логические операции

Таблица. Логические операции

Пример Имя Результат
$a and $b And TRUE, если и $a, и $b TRUE.
$a or $b Or TRUE, если $a или $b TRUE.
$a xor $b Xor TRUE, если $a или $b TRUE, но не оба.
! $a Not TRUE, если $a не TRUE.
$a && $b And TRUE, если и $a, и $b TRUE.
$a || $b Or TRUE, если $a или $b TRUE.

Операции and и or выполняются также, как && и || однако они имеют более высокий приоритет, чем соответствующие операции && и ||.

В качестве false принимается 0, в качестве true не 0. Обычно операции и функции возвращают в качестве true значение 1. Рассмотрим пример:

Операции and и or выполняются также, как && и || однако они имеют более высокий приоритет, чем соответствующие операции && и ||.

В качестве false принимается 0, в качестве true не 0. Обычно операции и функции возвращают в качестве true значение 1. Рассмотрим пример:

<?php //pr7.php

$b=('2' & '9');

echo "b=", $b, "<br>";// выдаёт '0'

$b=(2 && 9);

echo "b=", $b, "<br>";// выдаёт '1'

$a=(3 | 9);

echo "a=", $a, "<br>";// выдаёт 11

$c= $a and $b;

echo "c=", $c, "<br>";//выдаёт '11'

echo "c=", $c=$a && $b,"<br>";// выдаёт '1'

echo "c=", $c=3||4, "<br>";//выдаёт '1'

echo "c=", $c=3 or 4, "<br>";//1

?>

Строковые операции

Операция “+” используется только для сложения чисел, являющихся значениями строк и не является операцией конкатенации (слияния строк). Операцией конкатенации является операции “.” И ”.=”.

<?php //pr4.php

$one = '1';

$two= "2";

echo $one, $two;

print $one+$two; // выведет - 1 2 3

echo $one.$two; // выведет - 12

$one = (int)$one; $two= (float)$two;

print $one+$two;//3

$a = "Hello ";

$a.= "World!"; // теперь $a содержит "Hello World!"

?>

Вывод:

Переменные $one и $two являются строковыми, при сложении происходит неявное преобразование их значений к числовым. Может быть использовано явное преобразование: $one = (int)$one; $two= (float)$two;

Рассмотрим операторы сравнения строк. В PHP операнды сравниваются, как строки, только в случае, если оба они - строки. В противном случае они сравниваются как числа. При этом любая строка, которую PHP не удается перевести в число, в том числе и пустая, будет восприниматься как 0. Для сравнения строк не рекоммендуется использовать операторы сравнения == и!=, поскольку они требуют преобразования типов. Пример:

<?php

$x=0;

$y=1;

if ($x == "") echo "<p>x - пустая строка</p>";

if ($y == "") echo "<p>y - пустая строка</p>";

// Выводит:

// x - пустая строка

?>

Данный скрипт сообщает нам, что $x - пустая строка. Это связано с тем, что пустая строка ("") трактуется здесь как 0. Чтобы избежать путанницы и преобразования типов, при сравнении строк рекомендуется пользоваться оператором эквивалентности. Оператор эквивалентности сравнивает величины и по значению, и по типу:

<?php

$x="string";

$y="string";

$z="Строка";

if ($x === $z) echo "<p>Строка X равна строке Z</p>";

if ($x === $y) echo "<p>Строка X равна строке Y</p>";

if ($x!== $z) echo "<p>Строка X НЕ равна строке Z</p>";

// Выводит:

// Строка X равна строке Y

// Строка X НЕ равна строке Z

?>

Операторы управления

PHP содержит все основные конструкции языка C++: условные операторы if…else (elseif), switch, четыре вида операторов цикла и др.

Оператор выбора if имеет следующий синтаксис:

if (boolexp) { /*операторы, выполняемые при boolexp=true*/ } //1

else { /*операторы, выполняемые при boolexp=false */ } //2

Если выражение boolexp принимает значение true, то выполняется группа операторов 1, иначе – группа операторов 2. При отсутствии оператора else операторы, расположенные после окончания оператора if (строка 2), выполняются вне зависимости от значения булевского выражения оператора if. Допустимо также использование конструкции-лесенки if {} else if {}.

В следующем примере показана возможность отключения PHP, чтобы вывести без интерпретации часть html – документа.

<?php //pr8.php

$boolexp=true;

if ($boolexp):?> //отключение php

<img src="img/A_A.jpg" >

<?php endif; //включение php

$c=5;

echo "c=", $c=$c or 4, "<br>";//1

?>

Оператор if() при этом надо закончить оператором endif (аналогично endwhile, endfor). Создаваемый после PHP-интерпретации HTML- документ, пересылаемый браузеру, будет выглядеть следующим образом:

//отключение php

<img src="img/A_A.jpg" >

c=1<br>

Другой вариант состоит в использовании фигурных скобок вместо двоеточия:

<?php //pr81.php

$bexp=true;

if ($bexp) {?> //отключение php

<img src="img/A_A.jpg" >

<?php } //включение php

$c=5;

echo "c=", $c=$c or 4, "<br>";//1

?>

В PHP существует четыре вида циклов, первые три из них аналогичны соответствующим циклам в языке С++:

Цикл с предусловием:

while (boolexp) { /*операторы, выполняемые при boolexp=true */ }

Цикл с постусловием:

do { /*операторы, выполняемые при boolexp=true */ }

while (boolexp);

for (exp1; boolexp; exp3){ /*операторы*/ } // цикл с параметрами

Здесь по традиции exp1 – начальное выражение, boolexp – условие выполнения цикла, exp3 – выражение выполняемое в конце итерации цикла (как правило, это изменение начального значения). Циклы выполняются, пока булевское выражение boolexp равно true.

Eще один цикл, упрощающий доступ к массивам:

foreach ($array as[$key=>] $value){ /*операторы*/ }

При проходе каждого элемента массива в переменную $key помещается индекс данного элемента, а в переменную value – значение элемента. Индекс $key может отсутствовать.

Рассмотрим пример вывода элементов массива:

<?php //pr9.php

$massiv = array('one','two','three');

foreach($massiv as $value)echo $value;//onetwothree

?>

В следующем примере имеются нарушения правил работы с массивом.

<?

$a[]=1;

$a[]=2;

$a[]=4;

$a[]=8;

foreach ($a as $i) {$s=$s+$a[$i];}

echo ($s);

?>

Ответ: $s=6

Что неправильно, как-бы игнорируется первый и последний элементы.

Аналогично C++ используется оператор выбора варианта switch:

switch(exp) {

caseexp1:{ /*операторы*/ }

break;

caseexpN:{ /*операторы*/ }

break;

default: { /*операторы*/ }

}

При совпадении значения exp с одним из значений, указанным в case, выполняется соответствующий вариант и далее подряд все блоки операторов до тех пор, пока не встретится оператор break, Значения exp1,…, expN могут быть константами не только целого, но и вещественного или стрингового типа в отличие от C++.

Для выхода из циклов используются оператор прерывания цикла break и оператора прерывания итерации цикла continue.

<html>

<head></head>

<body>

<p>в прямоугольной матрице переставить столбцы в порядке возрастания суммы их элементов</p>

<?php //pr10.php

$matrix = array();

$n = 3;

$m = 5;

for($i=0;$i<$n;$i++)

for($j=0;$j<$m;$j++){

$matrix[$i][$j] = rand(0,9);

}

for($i=0;$i<$n;$i++){

for($j=0;$j<$m;$j++){

echo($matrix[$i][$j]);

echo(" ");

}

echo("<br>");

}

$sum = array();

for($j=0;$j<$m;$j++){

$sum[$j] = 0;

for($i=0;$i<$n;$i++){

$sum[$j]+=$matrix[$i][$j];

}

}

echo("<br>");

for($i=0;$i<$m;$i++){

echo($sum[$i]);

echo(" ");

}

for($i=0;$i<$m-1;$i++)

for($j=0;$j<$m-1-$i;$j++){

if($sum[$j]>$sum[$j+1]){

$temp = $sum[$j];

$sum[$j] = $sum[$j+1];

$sum[$j+1] = $temp;

for($k=0;$k<$n;$k++){

$temp = $matrix[$k][$j];

$matrix[$k][$j] = $matrix[$k][$j+1];

$matrix[$k][$j+1] = $temp;

}

}

}

echo("<br>");

echo("new matrix:");

echo("<br>");

for($i=0;$i<$n;$i++){

for($j=0;$j<$m;$j++){

echo($matrix[$i][$j]);

echo(" ");

}

echo("<br>");

}

?>

</body>

</html>

Функции

Функция может быть определена с использованием синтаксиса:

function fname ($arg_1, $arg_2,..., $arg_n)

{

echo "Пример \n";

return $val; //возвращаемое значение

}

Необязательный оператор return возвращает значение любого типа, в том числе список и объект.

<?php //pr11.php-найти все натуральные числа, не //превосходящие m и содержащие хотя бы одну девятку в //десятичном представлении

$m=rand(10,150); //случайное значение m

print "m=$m<br>";

for($i=1;$i<$m;$i++)

{$k=f($i);

if($k!=0)print "$k<br>";

}

function f($n)

{$l=$n;

do

{

if(($l%10)==9)return $n;}

while(($l/=10)!=0);

return 0;

}

?>

Пример. Вычисление площади треугольника по формуле Герона.

<html>

<head><title>Square</title></head>

<body>

Стороны треугольника:<br>

<?php //pr12

$a=rand(1,100);

$b=rand(1,100);

$c=rand(1,100);

print "$a<br>$b<br>$c<br>";

Proverka($a,$b,$c);

function Proverka($a,$b,$c)

{if(($a+$b<=$c)||($a+$c<=$b)||($b+$c<=$a))

echo "Треугольника с указанными сторонами не существует!!!!<br>Перезагрузите страницу!<br>";

else{

echo "Всё правильно!Треугольник с указанными сторонами действительно существует!!!!<br>";

$s=Geron($a,$b,$c);

echo "Его площадь равна<br> ";

print "$s";

}

}

function Geron($a,$b,$c){

$p=($a+$b+$c)/2;

return sqrt($p*($p-$a)*($p-$b)*($p-$c));

}

?>

</body>

</html>

Несколько значений можно возвратить путём возвращения списка и функции list().

function numbers()

{

return array (0, 1, 2);

}

list ($zero, $one, $two) = numbers();

Операция ссылки & в объявлении функции и в присвоении возвращаемого значения позволяет возвратить ссылку:

function &reference()

{

return $ref;

}

$newref =&reference();

Рекурсивные функции

<?

// Написать функцию вычисления x^n

function Evaluate($x,$n)

{

if ($n==1) return $x;

else return Evaluate($x,$n-1)*$x;

}

echo("x=5; n=3; res=");

echo(Evaluate(5,3));

echo("<BR>");

echo("x=0.2; n=3; res=");

echo(Evaluate(0.2,3));

?>

Аргументы функции

Список аргументов представляет набор переменных или констант, разделённых запятыми. PHP поддерживает разбор аргументов функций по значению, разбор по ссылке и значения по умолчанию.

В PHP, как и в С++, аргументы передаются в функцию по значению. Если необходимо дать функции возможность модифицировать аргументы, передавать их надо по ссылке &:

function f(&$str)

{

$str.= 'and extra.';

}

$str = 'This is a string, ';

f($str);

echo $str;// выводит 'This is a string, and extra.'

По ссылке в функцию передается не значение переменной $str, а ее адрес. После этого изменение переменной $str в функции влечет изменение аргумента $str в вызывающей функцию программе.

Функция может определить значения по умолчанию в стиле C++ для скалярных аргументов:

function f($а = "0")

{

return $а.;

}

echo f(); // 0.

echo f("1");// 1.

При вызове такой функции без аргумента, в качестве аргумента будет взято значение по умолчанию. Значение по умолчанию обязано быть константным выражением, но не переменной. Эти значения должны находиться справа от любых значений не по умолчанию.

Область действия и время жизни переменных

Переменные, объявленные вне функций имеют глобальную область действия. Любая переменная, определенная внутри функции, ограничена локальной областью функции и уничтожается при выходе из функции. Например, такая конструкция работать не будет, т.к. переменная находится в глобальной области, а ссылка на неё находится в теле функции.

$perem = 1; /* глобальная область */

function Test ()

{

echo $perem;

}

Test ();

А такая конструкция выдаст правильный результат:

function Test ()

{

$perem = 1; /* локальная область функции */

echo $perem;

}

Test ();

Чтобы глобальная переменная была доступна внутри функции, её необходимо внутри этой функции задекларировать как глобальную переменную.

<?php //pr18.php

/* глобальная область */

$a = 2;

$b = 3;

function Sum ()

{

global $a, $b; /* декларируем переменные $a и $b как глобальные */

$c = $a + $b; /* и теперь функция имеет к ним доступ */

echo $c;//5

global $myglobal;

$myglobal=0;

}

echo ($myglobal);//неопределенная переменная $myglobal

Sum ();

echo $myglobal; //0

?>

В PHP имеются переменные $_GET[],$_POST[],$_REQUEST[],$_COOKIE[], $_FILES[],$_SERVER[],$_ENV[],$_SESSION[], которые называются суперглобальными и которае доступны постоянно во время выполнения сценария PHP. Для доступа к переменным глобальной области в PHP используется также специальный массив $GLOBALS.

Время жизни локальной переменной – это время работы функции, в которой объявлена переменная. Для удлинения времени жизни локальной переменной используется ее объявление статической переменной. Статическая переменная существует только в локальной области функции, но не теряет своего значения после выхода из функции. Например:

Function Count ()

{

static $counter = 0; /* декларируем переменную $counter как статическую, при обращении к функции она не будет каждый раз обнуляться */

echo $counter;

$counter++; }

Count(); //количество обращений к функции

Изменяемые (динамические) переменные

Иногда бывает удобно давать переменным изменяемые имена. Такие имена могут изменяться динамически. Например:

$a = "hi";

Изменяемая переменная берет некое значение и обрабатывает его как имя переменной. В приведенном выше примере значение hi может быть использовано как имя переменной, посредством применения двух записанных подряд знаков доллара, т.е.:

$$a="PHP"; /* фактически получается что $hi="PHP" */

print "$a ${$a}"; /* получаем на выходе: hi PHP */

print "$a $hi"; /* или так, что одно и то-же */

Внешние библиотечные функции

В этом разделе описываются некоторые из наиболее часто используемых функций для работы с массивами. Более обширный список доступен на Web-сайте PHP.net.

Функции для работы с массивами

count() – используется для подсчета числа элементов в массиве.

sort() – используется для сортировки элементов массива.

shuffle() – используется для случайного перемешивания элементов в заданном массиве.

sizeof() – функция является синонимом функции count().

array_slice($array_name,offset, length) – используется для извлечения части существующего массива. $array_name является именем разрезаемого массива, offset указывает позицию, где будет начинаться разрез, length указывает число элементов, которое будет вырезано.

array_merge($array_name1, $array_name2) – используется для объединения или слияния двух или большего количества существующих массивов.

Рассмотрим пример:

<?php //pr48

$massiv = array('В пятницу вечером после работы

мама свои начинает заботы',

'папа залег на диван, как медведь',

'многое должен ребенок успеть',

'много проблем сам решить, все суметь');

foreach($massiv as $value) echo $value;//Вывод

sort($massiv);//Сортировка

foreach($massiv as $key=>$value)

echo ("<li>$key=>$value</li>");//

rsort($massiv);// Сортировка в обратном порядке

for($i=0;$i<count($massiv);$i++){

echo("<br>$massiv[$i]");

}

shuffle($massiv);// Перемешивание

for($i=0;$i<count($massiv);$i++){

echo("<br>$i-$massiv[$i]");

}

$massiv1=array_slice($massiv,2,3); //вырезать три члена, начиная со второго

// и присвоить их massiv1

print_r($massiv1);

?>

Функции для работы со строками. Базовые строковые функции

Система PHP содержит большое число функций для работы со строками. Приведем некоторые из наиболее распространенных строковых функций: strlen($str) – возвращает длину строки, ltrim($str) – удаляет символы разделители типа пробела или табуляции в начале строки, rtrim($str) – удаляет символы разделители в конце строки, trim($str) - вырезает пустое пространство в начале и в конце строки. Рассмотрим пример:

<?php //str1.php

//Удаление лишних пробелов по-левому боку текста:<br />

$str=" –Текст слишними пробелами по бокам.- “;

$str=ltrim($str); //удаление пробелов слева<br />

echo "$str", strlen($str)," <br />";

$str=rtrim($str); //Удаление пробелов справа<br />

echo "$str"," <br />";

$str=" Еще Текст с пробелами по бокам ". $str=trim($str);//Удаление пробелов слева и справа <br />

echo "$str";

?>

Вывод:

-Текст с лишними пробелами по бокам.- 89

-Текст с лишними пробелами по бокам.-

Еще Текст с лишними пробелами по бокам -Текст с лишними пробелами по бокам.-

Функция strpos(string $where, string $what[,int $fromwhere =0])пытается найти в строке $where подстроку $what и в случае успеха возвращает позицию этой подстроки в строке. Необязательный параметр $fromwhere можно задавать, если поиск нужно вести не с начала строки $from, а с другой позиции. Если подстроку найти не удалось, функция возвращает false.

string substr (string $str, int $start [, int $length]) - возвращает часть строки $str, начиная с позиции $start и длиной $length. Если $length не задана, то возвращается подстрока от позиции $start до конца строки $str. Если $start больше длины строки, или же значение $length равно нулю, то возвращается пустая подстрока. Если в $start отрицательное число, то это число является индексом подстроки, отсчитываемым от конца $str.

string strstr (string $str, string $needl) - находит в строке $str первое вхождение строки $needl. Возвращает часть строки $str от первого вхождения $needle до конца. Если needl не найден, возвращает FALSE. Функция чувствительна к регистру символов. Для поиска без учёта регистра используется функция stristr(). Рассмотрим пример:

<?php //str2.php

echo strpos("Hello","el"),"<br/>"; // Выводит 1

echo strstr("Hello","el"),"<br/>";

// чтобы избежать проблем с определением типов используйте

//операторы тождественных сравнений (===) (!==)

if (strpos("Norway","rwa")!== false)

echo "Строка rwa есть в Norway","<br/>";

//Пример использования substr()

echo $rest = substr("abcdef", 1),"<br/>"; //возвращает "bcdef"

echo $rest = substr("abcdef", 0, 4),"<br/>";//возвращает "abcd"

$str = "Programmer";

echo substr($str,0,2),"<br/>"; // Выводит Pr

echo substr($str,-3,3),"<br/>"; // Выводит mer

//Пример strstr()

$email = '[email protected]';

$domain = strstr($email, '@');

print "$domain, <br/>"; // печатает @example.com

?>

Вывод:

Ello

Строка rwa есть в Norway

Bcdef

Abcd

Pr

Mer

@example.com,

Функция strcmp(string $str1, string $str2)

сравнивает две строки посимвольно и возвращает: 0, если строки совпадают; -1, если строка $str1 лексикографически меньше $str2; и 1, если, наоборот, $str1 "больше" $str2. Для функции strcmp() регистр символов влияет на результаты сравнений, для strcasecmp(string $str1, string $str2) регистр не учитывается.

Функция strspn() возвращает длину первого сегмента строки1, содержащего символы, присутствующие в строке2. Синтаксис функции strspn():

int strspn (string строка1, string строка2)

Следующий фрагмент показывает, как функция strspn() используется для проверки пароля. Здесь же сравниваются две одинаковые строки:

<? //Str13.php

$string1 = "butter";

$string2 = "Butter";

if ((strcmp($string1, $string2)) == 0)

print "Strings are equivalent!";

else

print "Strings are not equivalent!";

if ((strcasecmp($string1, $string2)) == 0)

print "Строки совпадают с точностью до регистра!";

$password = "12345";

if (strspn($password, "1234567890") ==strlen($password))

print "Password cannot consist solely of numbers!";

?>

Вывод:

Strings are not equivalent!

Строки совпадают с точностью до регистра!

Password cannot consist solely of numbers!

Функция strcspn() возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2. Синтаксис функции:

int strcspn (string строка1, string строка2);

str_replace(string $from, string $to, string $str)

Заменяет в строке $str все вхождения подстроки $from (с учетом регистра) на $to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется. Например, вот так мы можем заместить все символы перевода строки на их HTML эквивалент — тэг <br>:

$st=str_replace("\n","<br>\n",$str)

То, что в строке <br>\n тоже есть символ перевода строки, никак не влияет на работу функции, т. е. функция производит лишь однократный проход по строке.

string WordWrap(string $str, int $width=75, string $break="\n")

Функция разбивает блок текста $str на несколько строк, завершаемых символами $break, так, чтобы на одной строке было не более $width букв. Разбиение происходит по границе слова. Возвращается получившаяся строка с символами перевода строки, заданными в $break. Функция, оказывается полезной, например, при форматировании текста письма перед автоматической отправкой его адресату при помощи mail(). Пример использования:

<?php //str3.php

$str = "Это текст электронного письма, которое нужно отправить адресату ";

// Разбиваем текст по 20 символов

$str = WordWrap ($str, 30, "<br>");

echo $str;

?>

Вывод: Это текст электронного письма,

которое нужно отправить

адресату

string stripcslashes (string str) - возвращает строку с вырезанными обратными слэшами. Распознаёт C-подобные \n, \r.

strip_tags (string $str [, string $allowable_tags])

Эта функция удаляет из строки все тэги и возвращает результат. В параметре $allowable_tags перечисляться вплотную друг к другу тэги, которые не следует удалять из строки. Примеры:

<? //str4.php

$str="<b>жирный текст</b>";

echo "$str,<br/>";

$str=strip_tags($str);

echo "НЕ $str<br/>";

//Удаление всех тэгов, кроме <b> и <i>:

$str="<h1>большой текст</h1> <b><i>жирный текст</i></b>";

echo "$str <br/>";

$str=strip_tags($str,"<b><i>");

echo "$str,<br/>";

$strip = strip_tags ($str); // Удаляет все - теги из строки

echo "$strip<br/>";

?>

Вывод:

жирный текст,
НЕ жирный текст





Дата публикования: 2014-11-18; Прочитано: 814 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.138 с)...