информационных технологий» 2 глава
Логические переменные. Логическая переменная может содержать одно из двух значений: false или true. Кроме того, любое ненулевое число (и непустая строка) символизирует истину, тогда как 0, пустая строка – ложь. echo false; // выводит пустую строку echo true; // выводит 1 Действия с переменными. Вне зависимости от типа переменной, с ней можно делать три основных действия. Присвоение значения (оператор =). Проверка существования. Можно проверить существует ли (то есть, инициализирована ли) указанная переменная. Осуществляется это с помощью оператора IsSet(). Если такая переменная существует, функция возвращает значение истина, в противном случае – ложно. if(IsSet($MyVar)) echo ”Такая переменая есть. Её значение $MyVar”; Уничтожение. Уничтожение переменной реализуется оператором Unset(). После этого Действия переменная удаляется из внутренних таблиц интерпретатора, т.е. программы начинает выполняться так, как будто переменная еще не была инициализирована. $a=”Hello”; echo $a; Unset($a); // теперь переменной а не существует echo $a; // Ошибка: нет такой переменной Применение Unset() для работы с обычными переменными нецелесообразно. Она используется для удаления элементов в ассоциативном массиве. Например, если в массиве $A нужно удалить элемент с ключом for_del: Unset($A[”for_del”]); Стандартные функции определения типа переменной: is_integer($a) //возвращает true, если $a – целое число is_double($a) //возвращает true, //если $a – действительное число is_string($a) //возвращает true, если $a – строка is_array($a) //возвращает true, если $a – массив is_object($a) //возвращает true, если $a – объект is_boolean($a) //возвращает true, // если $a – логическая переменная is_gettype($a) //возвращает строки со значениями array, object, //integer, double, string, boolean или unknown type
//в зависимости от типа переменной. Последнее //значение возвращается для тех переменных, //типы которых не являются встроенными в РНР. Установка типа переменной Функция settype(переменная,тип) пытается привести тип указанной переменной к одному из стандартных типов и возвращает значение false, если это не удалось. settype($a,”integer”); Оператор присваивания $имя_переменной=значение; В конце каждого оператора должна стоять; Cсылочные переменные. Хотя в РНР нет такого понятия как указатель, все же можно создавать ссылки на другие переменные. Существует две разновидности ссылок: жесткие и символические. Жесткая ссылка представляет собой просто переменную, которая является синонимом другой переменной. Многоуровневые ссылки (то есть ссылка на ссылку) не поддерживаются. Жесткие ссылки создаются с помощью оператора &. $a=10; $b=&$a; // теперь $b то же самое, что и $a Жесткая ссылка и переменная (объект), на которую она ссылается, совершенно равноправны, изменение одной влечет изменение другой. Оператор Unset() выполненный для жесткой ссылки, не удаляет объект, на которую она ссылается, а всего лишь разрывает связь между ссылкой и объектом. Объект удаляется только тогда, когда на него никто уже не ссылается. Жесткие ссылки применяются при передаче параметров функции и возврате значения из нее. Символическая ссылка – строковая переменная, хранящая имя другой переменной. Чтобы добраться до значения переменной, на которую ссылается символическая ссылка, необходимо применить оператор разыменования – дополнительный знак $ перед именем ссылки. $a=10; $p=”a”; // присваиваем $p имя другой перемнной echo $$p;//выводим переменную, на которую ссылается $p, т.е. $a $$p=100; // присваивает $a значение 100 Итак, для того, чтобы использовать обычную строковую переменную как ссылку, нужно перед ней поставить еще один знак $. Это говорит интерпретатору, что надо взять не значение самой $p, а значение переменной, имя которой хранится в переменной $p.
Использование символических ссылок лучший способ запутать программу, поэтому старайтесь их избегать! Константы. Константа отличается от переменной тем, что ей нигде в программе нельзя присвоить значение более одного раза, и её имя не предваряется знаком $, как это делается для переменных. Константы бывают 2 типов: предопределенные (установленные самим интерпретатором) и определенные программистом. Предопределенные константы: _FILE_ – хранит имя файла программы, которая выполняется в данный момент _LINE_ – содержит текущий номер строки, которую обрабатывает в текущий момент интерпретатор PHP_VERSION – версия интерпретатора РНР PHP_OS – имя операционной системы, под которой работает РНР TRUE или true – истина FALSE или false – ложно Определенные пользователем константы задаются при помощи оператора define() define(”pi”,3.14); define (”str”,”Hello”); echo sin(pi/4); echo str; Функция defined(имя константы) проверяет, существует ли константа с указанным именем и возвращает значение false, если такой константы нет. Выражения Числовые выражения $a=5; // a=5 $a=($b=10); // $a=$b=10 $a=4*sin($b=$c+10)+$d; // $b=$c+10 // $a=4*sin($c+10)+$d Следующие операторы преобразования типов используются как в функциональной, так и в префиксной операторной форме, т.е. следующие конструкции эквивалентны: $a=intval($b); $a=(int)$b; Операторы преобразования типов: $b=intval(выражение) или $b=(int) (выражение) // переводит выражение в целое число $b=doubleval(выражение) или $b=(double) (выражение) // переводит выражение в действительное число $b=strval(выражение) или $b=(string) (выражение) // переводит выражение в строку $b=(bool) (выражение) // переводит выражение в логический тип. Логические выражения. Логические операторы: <, >, == (равно), || (или),! (не), && (и). Переменным можно присваивать значения логических выражений: $a=10<5; // a=false $a=$b==1; // $a=true, если $b=1 $a=$b>1&&$b<=10 // $a=true, если $b в пределах от1 до 10 $a=!($b||$c)&&$d; //$a=true, если $b и $c ложны, а $d – истинно $b=$a>=1&&a<=10; //присваиваем $b значение логического // выражения if ($b) echo ”a в нужно диапазоне значений”; Cтроковые выражения. Строки могут содержать текст вместе с символами форматирования. Определение строки в кавычках или апострофах может начинаться на одной строке, а завершаться на другой.
Строка, заключенная в апострофы трактуется так же, как записана, за исключением двух последовательностей символов: \’ трактуется как апостроф, предназначенный для вставки апострофа в строку, заключенную в апострофы; \\ трактуется как обратный слэш и позволяет вставить в строку этот символ. Строки в кавычках могут содержать набор специальных метасимволов: \n – символ новой строки; \r – символ возврата каретки; \t – символ табуляции; \$ – обозначает символ $, чтобы следующий за ним текст не был интерпретирован как переменная; \” – кавычка; \\ – обратный слэш; \xNN символ с шестнадцатеричным кодом NN. Для слияния строк используется операция конкатенации “.”. Операторы, выводящие текстовые строки. echo ”Текущая дата: $dat года <br>\n”; echo ”Текущая дата:”,$dat,” года <br>\n”; echo ”Текущая дата:”.$dat.” года <br>\n”; Плюс используется как числовой оператор, а точка – как строковый: $a=”100”; $b=”200”; echo $a+$b; // выведет “300” echo $a.$b; // выведет “100200” Here–документ. Это способ записи строковых констант, который представляет собой альтернативу для записи многострочных констант. $a=<<<MARKER Далее идет какой-то текст, возможно, с переменными $name значения которых будут вставлены в документ MARKER; Строка MARKER может быть любым алфавитно-цифровым идентификатором. Синтаксис накладывает 2 ограничения на here-документы: 1) после <<<MARKER и до конца строки не должны идти никакие непробельные символы; 2) завершающая строка MARKER; должна оканчиваться точкой с запятой, после которой до конца строки не должно быть никаких инструкций. MARKER – это любой идентификатор. Вызов внешней программы. Строка в обратных апострофах заставляет РНР выполнить команду операционной системы и то, что она вывела, подставить на место строки в обратных апострофах. Например, содержимое текущего каталога можно узнать так: $st='command.com/c dir'; echo ”<pre>$st</pre>”; Операции: Арифметические: +, -, *, /, a%b (остаток от делении а на b, работает только с целыми числами), $a+=4; $b-=3; Строковые: a.b – слияние строк; a[n] – символ строки в позиции n.
Присваивания (=). Инкремента и декремента ($a++, $a--, --$a, ++$a). Битовые операции. Предназначены для работы (установки/снятия/проверки) групп битов целой переменной. Биты целого числа – это отдельные разряды того же самого числа, записанного в двоичной системе счисления: a&b, a|b, `a, a<<b (сдвиг влево), a>>b (сдвиг вправо). Операции сравнения: a==b, a!=b, a<b, a>b, a<=b, a>=b. Операции эквивалентности: это тройной знак равенства = = =, или оператор проверки на эквивалентность. Это оператор не только сравнивает выражения, но и их типы. Есть антипод этого оператора (!= =) – не эквивалентны. Логические операции.!a, a&&b, a||b Оператор отключения предупреждений. В РНР-программах все ошибки выводятся в окно браузера вместе с указанием строки и файла, в которых они находятся. РНР ранжирует ошибки и предупреждения по четырем основным «уровням серьезности». Можно настроить PHP так, чтобы он выдавал только ошибки тех уровней, которые необходимы. Для отключения выдачи ошибок в окно браузера, существует оператор @(отключение ошибок). Если разместить этот оператор перед любым выражением, то сообщения об ошибках в этом выражении будут подавлены и в окне броузера не отображены. <? if (@$doGo) echo ”Вы нажали кнопку!”;?>
Виды комментариев: операторы // комментарий # однострочный комментарий /* многострочные комментарии (ими лучше не пользоваться! так как они вступают в конфликт с русскими буквами) */ Замечания 1 Для вывода значений переменных, переданных из форм, нужно использовать оператор print и указывать метод передачи данных: print ”Ваше имя:”.$_GET[’name’]; print ”Ваше имя:”.$_POST[’name’]; 2 Условные обозначения при использовании стандартных функций PHP: · string – обычная строка, или тип, который можно перевести в строку; · int, long – целое число, либо вещественное число (в последнем случае дробная часть отсекается), либо строка, содержащая число в одном из перечисленных форматов. Если строку не удается перевести в int, то вместо нее подставляется 0, и никаких предупреждений не генерируется! · double, float – вещественное число, или целое число, или строка, содержащая одно из таких чисел.; · bool– логический тип, который будет восприниматься либо как ложь (нулевое число, пустая строка или константа false), либо как истина (все остальное); · array– ассоциативный массив; · list– массив с целыми ключами, пронумерованными от 0 и следующими подряд. Так как список является разновидностью ассоциативного массива, то обычно вместо параметров функций типа list можно подставлять и параметры типа array; · object– объект какой-то структуры; · void– применяется только для определения возвращаемого функцией значения (не возвращает ничего);
· mixed– все, что угодно. Это может быть целое или дробное число, строка, массив или объект.
Тема 3 Работа с данными формы
3.1 Передача данных 3.2 Трансляция полей формы в переменные 3.1 Передача данных Web-программирование в большей части (или хотя бы наполовину) представляет собой обработку различных данных, введенных пользователем – т. е., обработку форм. Передача данных командной строкой. Напишем сценарий, который принимает в параметрах Имя и возраст пользователя и выводит: "Привет, <имя>! Я знаю, вам <возраст> лет!". Рассмотрим способ передачи имени и возраста сценарию – непосредственный набор их в URL после знака? – например, в формате http://www.script.php?name=имя&age=возраст Пусть на сервере в корневом каталоге есть сценарий на РНР под названием hello.php. Наш сценарий распознает 2 параметра: name и аgе. Он должен отработать и вывести следующую HTML-страницу: <html> <body> Привет, name! Я знаю, Вам age лет! </body> </html> Нужно name и age заменить на соответствующие значения. Таким образом, если задать в адресной строке браузера http://www.somehost.com/script.php?name=Vasya&age=20 мы должны получить страницу с требуемым результатом. Чтобы в сценарии получить строку параметров, переданную после знака вопроса в URL при обращении к сценарию, можно проанализировать переменную окружения QUERY_STRING, которая в РНР доступна под именем $QUERY_STRING. <html> <body> <? print "Данные из командной строки: $QUERY_STRING"; ?> </body> </html> Если теперь мы запустим этот сценарий из браузера (перед этим сохранив его в файле test.php в корневом каталоге сервера) примерно следующим образом: http://www.myhost.com/test.php?aaa+bbb+ccc+ddd то получим документ следующего содержания: Данные из командной строки: aaa+bbb+ccc+ddd Обратите внимание на то, что URL-декодирование символов не произошло: строка $QUERY_STRING, как и одноименная переменная окружения, всегда приходит в той же самой форме, в какой она была послана браузером. Так как РНР изначально создавался именно как язык для Web-программирования, то он дополнительно проводит некоторую работу с переменной $QUERY_STRING перед тем, как управление будет передано сценарию, а именно, он разбивает ее по пробельным символам (в нашем примере пробелов нет, их заменяют символы +, но эти символы РНР также понимает правильно) и помещает полученные кусочки в массив-список $argv, который впоследствии может быть проанализирован в программе. Однако массив $argv используется при программировании на РНР крайне редко, что связано с гораздо большими возможностями интерпретатора по разбору данных, поступивших от пользователя. Однако в некоторых ситуациях его применение оправдано. Формы. Для того, чтобы пользователь мог в удобной форме ввести свое имя и возраст, нужно создать обычный HTML-документ (например, form.html) с элементами этого диалога – текстовыми полями – и кнопкой, т.е. форму: <html> <form action=hello.php> Введите имя: <input type=text name="name" value="Елена"><br> Ваш возраст: <input type=text name="age" value="5"><br> <input type=submit value="Отправить"> </form> </body> </html> Загрузим наш документ в браузер. Теперь, если ввести в поле с именем свое имя, а в поле для возраста – свой возраст и нажать кнопку, браузер автоматически обратится к сценарию hello.php и передаст через? все атрибуты, расположенные внутри тэгов <INPUT> в форме и разделенные символом & в строке параметров. Заметьте, что в атрибуте action тэга <form> мы задали относительный путь, т.е. сценарий hello.php будет искаться браузером в том же самом каталоге, что и файл form.html. Все перекодирования и преобразования, которые нужны для URL-кодирования данных, осуществляются браузером автоматически. В частности, буквы кириллицы превратятся в %xx, где хх – шестнадцатеричное число, обозначающее код символа. Листинг hello.php – модель простого РНР-сценария <html> <body> <? print "Привет, ".$_GET['name']. ". Вам ".$_GET['age']." лет."; ?> </body> </html>
3.2 Трансляция полей формы в переменные Интерпретатор все данные из полей формы преобразует в глобальные одноименные переменные. Значение поля name после начала работы программы будет храниться в переменной $name, а значениеполя age – в переменной $age. Теперь сделаем так, чтобы при запуске без параметров сценарий выдавал документ с формой, а при нажатии кнопки – выводил нужный текст. Самый простой способ определить, был ли сценарий запущен без параметров – проверить, существует ли переменная с именем, совпадающим с именем кнопки отправки. Если такая переменная существует, то, очевидно, что пользователь запустил программу, нажав на кнопку. <html> <body> <?if(!@$doGo) { ?> <form action=”<?=$SCRIPT_NAME?>”> //<form action=hello.php> Введите имя: <input type=text name="name" value="Елена"><br> Ваш возраст: <input type=text name="age" value="5"><br> <input type=submit name="doGo" value="Отправить"> </form> <? } else { ?>
Привет!<br> <? print "Привет, ".$_GET['name']. ". Вам ".$_GET['age']." лет."; ?> <? } ?> </body> </html> Конструкция <?=выражение?> является более коротким обозначением для <?echo(выражение)?>, и предназначена для того, чтобы вставлять величины прямо в HTML-страницу. Обратите внимание на полезный прием: в параметре action тэга <form> мы не задали явно имя файла сценария, а извлекли его из переменной SCRIPT_NAME (которая устанавливается автоматически перед запуском сценария). Это позволило нам не "привязываться" к имени файла, т.е. теперь мы можем его в любой момент переименовать без потери функциональности. Если РНР установлен не как модуль Apache, а как отдельный обработчик, то переменная $SCRIPT_NAME будет содержать не то значение, на которое мы рассчитываем. К тому же, теперь исчезла необходимость и в промежуточном файле form.html, его код встроен в сам сценарий. Трансляция переменных окружения и Cookies. В переменные преобразуются не только все данные формы, но и переменные окружения (включая QUERY_STRING, CONTENT_LENGTH и многие другие), а также все Cookies. Пример сценария, который печатает IP-адрес пользователя, который его запустил, а также тип его браузера (эти данные хранятся впеременных окружения REMOTE_USER и HTTP_USER_AGENT): <html><body> Ваш IP-адрес: <?=$REMOTE_USER?><br> Ваш браузер: <?=$HTTP_USER_AGENT?> </body></html> По умолчанию, трансляция выполняется в порядке ENVIRONMENT-GET-POST-COOKIE, причем каждая следующая переменная как бы перекрывает предыдущее свое значение. Например, пусть у нас есть переменная окружения а=10, параметр, поступивший из GET-формы a=20 и Cookie а=30. В этом случае в переменную $а сценария будет записано 30, поскольку Cookie перекрывает GET, a GET перекрывает переменные окружения. Трансляция списков. Механизм трансляции полей формы в РНР работает приемлемо, когда среди них нет полей с одинаковыми именами. Если же таковые встречаются, то в переменную записываются только данные последнего встретившегося поля. Это довольно-таки неудобно при работе, например, со списком множественного выбора <select multiple>: <select name=Sel multiple> <option>First <option>Second <option>Third </select> B таком списке вы можете выбрать (подсветить) не одну, а сразу несколько строчек, используя клавишу <Ctrl> и щелкая по ним кнопкой мыши. Пусть мы выбрали First и Third. Тогда после отправки формы сценарию придет строка параметров Sel=First&Sel=Third, и в переменной $Sel окажется только Third. Для решения подобных проблем в РНР предусмотрена возможность давать имена полям формы в виде имени массива с индексами: <select name="Sel[]" multiple> <option>First <option>Second <option>Third </select> Теперь сценарию придет строка Sel[]=First&Sel[]=Third, интерпретатор обнаружит, что мы хотим создать "автомассив" (то есть массив, который не содержит пропусков, и у которого индексация начинается с нуля), и, действительно, создаст переменную $Sel типа массив, содержимое которого следующее: array (0=>"First", 1=>"Third"). Пример работы с автомассивами: $A[]=10; $А[]=20; $А[]=30; После отработки этих строк будет создан массив $A, заполненный последовательно числами 10, 20 и 30, с индексами, отсчитываемыми с нуля. То есть, если внутри квадратных скобок при присваивании элементу массива не указано ничего, то подразумевается элемент массива, следующий за последним. Прием с автомассивом применим не только к этому элементу формы: автомассивы мы можем применять и в любых других полях. Пример, создающий 2 переключателя (кнопки со значениями вкл/выкл), один редактор строки и одно текстовое (многострочное) поле, причем все данные после запуска сценария, обрабатывающего эту форму, будут представлены в виде одного-единственного автомассива: <input type=checkbox name=Arr[] value=chl> <input type=checkbox name=Arr[] value=ch2> <input type=text name=Arr[] value="Some string"> <textarea name=Arr[] >Some text</textarea> Автомассивы можно использовать для любых элементов формы. Трансляция массивов. Пусть имеется форма, содержащая следующие элементы: Имя: <input type=text name=Data[name]><br> Адрес: <input type=text name=Data[address]><br> Город:<br> <input type=radio name=Data[city] value=Moscow>Mоcква<br> <input type=radio name=Data[city] value=Peter>Caнкт-Петербург<br> <input type=radio name=Data[city] value=Kiev>Kиeв<br> После передачи подобных данных сценарию на РНР в нем будет инициализирован ассоциативный массив $Data с ключами name, address и city. То есть, имена полям формы можно давать не только простые, но и представленные в виде одномерных ассоциативных массивов. В сценарии к отдельным элементам формы можно будет обратиться при помощи указания ключа массива: например, $Data[’city’] обозначает значение той радиокнопки, которая была выбрана пользователем, a $Data["name"] – введенное имя. В сценарии мы обязательно должны заключать ключи в кавычки или апострофы – в противном случае интерпретатором будет выведено предупреждение. В то же время, в параметрах name полей формы мы, наоборот, должны их избегать. Многомерные массивы (то есть, массивы массивов) указывать нельзя. Тема 4 Конструкции языка 4.1 Условные инструкции 4.2 Инструкции циклов 4.3 Инструкции включения 4.1 Условные инструкции О терминологии. Термины «конструкция» и «инструкция» совершенно эквивалентны. Термины «оператор» и «операция» несут разную смысловую нагрузку: любая операция есть оператор, но не наоборот. Например, echo – оператор, но не операция, а ++ – операция. Инструкция if–else.
Конструкция else может опускаться. if ($a>=l&&$b<=10) echo "Все ОК"; else echo "Неверное значение в переменной!"; Если инструкция_1 или инструкция_2 должны состоять из нескольких команд, то они, заключаются в фигурные скобки: if ($a>$b) { print "а больше b"; c=$b; } else if {$а==$b) { print "а равно b"; $c=$a; } else { print "а меньше с"; $с=$а; } Замечание: elseif пишется слитно! Обратите внимание на расположение двоеточия (:)! Если его пропустить, будет сгенерировано сообщение об ошибке. Блоки elseif и else можноопускать. Использование альтернативного синтаксиса. Для того чтобы вставить HTML-код в тело сценария, достаточно просто закрыть скобку?>, написать этот код, а затем снова открыть ее при помощи <?, и продолжать программу. Чаще всего, однако, нужно бывает делать не вставки HTML внутрь программы, а вставки кода внутрь HTML. Поэтому целесообразно бывает отделять HTML-код от программы, например, поместить его в отдельный файл, который затем подключается к программе при помощи инструкции include. Пример сценария с использованием альтернативного синтаксиса if-else: <?if(@$go):?> Привет, <?=$name?>! <?else:?> <form action=<?=$REQUEST_URL?> method=post> Ваше имя: <input type=text name=name><br> <input type=submit name=go value="Отослать!"> <?endif?> Конструкция switch-case.
4.2 Инструкции циклов Цикл с предусловием while.
Цикл с постусловием do-while. do { команды; } while (логическое_выражение); Альтернативного синтаксиса для do-while нет. Универсальный цикл for.
Инструкции break и continue. Инструкция break осуществляет немедленный выход из цикла. Она может задаваться с одним необязательным параметром – числом, которое указывает, из какого вложенного цикла должен быть произведен выход. По умолчанию используется 1, т. е. выход из текущего цикла, но иногда применяются и другие значения: for ($i=0; $i<10; $i++) { for($j=0; $j<10; $j++) If($A[$i]==$A[$j]) break(2); } If ($i<10) echo "Есть совпадающие элементы в матрице А!"; В этом примере инструкция break осуществляет выход не только из второго, но и из первого цикла, поскольку указана с параметром 2. Инструкция continue так же, как и break, работает только «в паре» с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой. Так же, как и для break, для continue можно указать уровень вложенности цикла, который будет продолжен по возврату управления. Цикл foreach. Данный тип цикла предназначен специально для перебора всех элементов ассоциативного массива. Формат: foreach (массив as $key=>$value) команды; Здесь команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=>значение оказывается в переменных $key и $value.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|