Lecture7-1(ПеременныеPHP)-Web.ppt
- Количество слайдов: 39
Программирование для Web. Язык PHP(Переменные в РНР) Проф. Куссуль Н. Н. 1
Основні поняття РНР – серверна мова сценаріїв, які можна вбудовувати в HTML-код. Переваги: n n n Простота С-подібний синтаксис Зручність роботи з базами даних Підтримка ООП Наявність числених бібліотек та каркасів для розробки Web-додатків 2
Оглавление Переменные Ключевые слова Типы данных Преобразование типов Средства вывода информации Комментарии 3
Переменные В РНР имена переменных n n начинаются с символа доллара ($). чувствительны к регистру. $username и $User. Name - имена разных переменных. n n начинается с буквы или символа подчеркивания, за которым может следовать любое количество буквенно-цифровых символов или символов подчеркивания. можно использовать символы кириллицы. Примеры неправильных имен переменных: $4 name $&Test $8 +abc 4 a a, b 4
Переменные Пример: <? php // создание двух разных переменных $username = ‘Barry’; $User. Name = ‘White’; //вывод результатов echo “$username $User. Name”; ? > Результат выполнения сценария: Barry White 5
Переменные Значения могут быть присвоены переменным либо по значению (способ, который был применен выше) либо по ссылке. В языке PHP ссылки предоставляют возможность получения доступа к значению одной и той же переменной с использованием разных имен. Ссылки PHP не являются аналогами указателей в языке C. Их следует рассматривать как псевдоним, который можно использовать для доступа к значению переменной. Для присваивания значения по ссылке необходимо просто добавить символ амперсанта (&) перед именем переменной, значение которой присваивается. <? php $name = ‘Barry’; $myname = &$name; echo $myname; ? > В этом фрагменте со значением Barry связывается два имени, $name $myname. 6
Переменные Область видимости — это контекст, в пределах которого переменная определена. Чаще всего переменные PHP имеют одну область видимости, к которой относятся также все файлы, включаемые в текущий сценарий с использованием конструкций include() и require(). Область видимости любой переменной, которая определена внутри функции, по умолчанию ограничена телом функции. 7
Ключевые слова and break case class continue default do elseif extends false foreach function global if include list new not or require return static switch this true var virtual xor while w нечувствительны к регистру (while, WHILE, While, w. Hi. Le) 8
Типы данных Целый Тип с плавающей точкой Логический Строковый Массивы Классы тип NULL 9
Типы данных В РНР тип переменной не объявляется (тип определяется исходя из контекста ее использования) $var = 2; // $var - целое число 2 $var = “ 2”; // $var - строка содержащая 2 $var = array(2); // $var - это массив, содержащий один элемент – 2 n определяется каждый раз присваивании значения. n Несвязанные переменные (unbound variables) - переменные, которым не было присвоено определенное значение: n n n имеют тип NULL могут содержать единственное значение NULL. Если используются в выражении, то выполняется приведение значения NULL. (в зависимости от контекста) Например: если в выражении используются целые числа, то значение NULL преобразуется в 0, если строки — то в пустую строку. 10
Типы данных С помощью функции Is. Set() можно проверить, содержится ли в данный момент в переменной какое-либо конкретное значение. В качестве параметра этой функции передается имя проверяемой переменной. Функцией Is. Set() возвращается логическое значение. Например, при вызове функции Is. Set($holiday) будет возвращено значение true, если в текущий момент в переменной $holiday содержится значение, отличное от NULL. В противном случае будет возвращено значение false. Переменная будет содержать какое-либо значение до тех пор, пока ей не будет присвоено другое значение либо пока она не будет переведена в “неопределенное” состояние с использованием функции Un. Set(). 11
Целый тип В языке РНР есть единственный целочисленный тип integer, который соответствует типу long в С++. Целые значения можно записывать в десятичной, шестнадцатеричной и восьмеричной формах. Значение, которое начинается с 0 x, является шестнадцатеричным числом, а с 0 — восьмеричным. $number 1 = 1234; // десятичное число $number 2 = -123; // отрицательное число $number 3 = 062; // восьмеричное представление числа 50 $number 4 = 0 xff; // шестнадцатеричное (255) Размер целого зависит от используемой платформы, хотя в большинстве случаев он равен тридцати двум битам. Если результат выполнения операции над целыми числами выходит за рамки целого типа, то он автоматически преобразовывается в тип с плавающей точкой double, который позволяет хранить большие значения. $a = 1/2; // $a равно 0. 5 $a = 2147483648; // $a стало 2147483648, а не -1 В первой строке переменной $a присваивается значение 0. 5. Во второй строке присваивании большого числа вместо переполнения выполняется расширение типа. 12
Тип с плавающей точкой Тип double в РНР соответствует аналогичному типу в С++. Как и в случае целочисленной переменной, размер переменной с плавающей точкой зависит от используемой системы. Значения с плавающей точкой можно указывать либо в обычной форме с использованием точки (. ), в экспоненциальной форме либо в комбинированной форме. Другими словами, выражения. 345 и 345. с точки зрения синтаксиса РНР являются абсолютно корректными. Ниже приведены примеры чисел с плавающей точкой. $a = 12. 34; $a = 12. 3 E 4; $a = 12 e-34; 13
Логический тип Логические (или булевы) переменные могут принимать одно из двух значений — истина (true) или ложь (false). Значение булевой переменной можно задать с помощью ключевых слов true и false. $bool. Value = true; // $bool. Value становится true При этом используемый регистр не играет никакой роли. Обычно логические значения являются результатом выполнения логических операций, которые после этого анализируются с использованием управляющих конструкций языка. Например, if ($a > $b) { echo “a > b”; } 14
Логический тип Хотя логический тип представляет собой обычный тип данных, такой же как и integer, в его контексте могут использоваться и другие типы. Если в булевом контексте используется целочисленное выражение, то это выражение интерпретируется как false при его равенстве нулю и true — в противном случае. Строковое выражение будет интерпретироваться как false в том случае, если оно будет эквивалентно пустой строке или строке “ 0”. Во всех остальных случаях строковое выражение будет эквивалентно логическому значению true. Из вышесказанного следует, что строка “ 0. 0” в логическом контексте будет интерпретироваться как true. 15
Встроенные функции для работы с числовыми переменными В РНР имеется множество встроенных функций, которые позволяют манипулировать числовыми значениями. Некоторые из наиболее часто используемых приведены в табл. , где число означает либо целое значение либо значение с плавающей точкой двойной точности. 16
Встроенные функции для работы с числовыми переменными Имя функции Типа параметра Возвращаемое значение floor Double Наибольшее целое, меньшее или равное входному параметру ceil Double Наименьшее целое, большее или равное входному параметру round Double Ближайшее целое srand Integer Инициализирует генератор случайных чисел на основе переданного параметра rand Два числа Псевдослучайное число, большее чем первый параметр и меньше чем второй параметр abs Число Абсолютное значение параметра min Одно или несколько чисел Наименьшее число max Одно или несколько чисел Наибольшее число exp Число Возвращает значение степени с основанием е и указанным аргументом log Число Возвращает значение натурального логарифма от заданного аргумента sin Число Возвращает значение синуса от заданного параметра 17
Встроенные функции для работы с числовыми переменными Ниже приведено несколько примеров использования стандартных функций РНР для работы с числовыми данными. <? php echo log(exp(1)). “ ”; echo sin(PI()/2); ? > Конечно, использованием стандартных (или встроенных) функций РНР дело не ограничивается. Функции являются мощным средством алгоритмической декомпозиции. 18
Строковый тип Строка в PHP — это последовательность байтов. В PHP нет встроенной поддержки формата Unicode. Строковые константы (литералы) можно определить с помощью одинарных или двойных кавычек. Различие между этими двумя символами-разделителями аналогично их использованию в языке Perl. Специальные символы (например, ’ и \) в строковых литералах, ограниченных одинарными кавычками, не распознаются. Это касается также и встроенных переменных. Такие константы будут выведены в выходной поток без каких бы то ни было изменений. Обработка строковых констант в двойных кавычках происходит совсем по другому. В частности, встроенные переменные будут корректно распознаны интерпретатором РНР (т. е. интерполированы) и вместо них будут подставлены их текущие значения 19
Строковый тип Например, строка ‘The age is: $age’ будет выведена в выходной поток без изменений. Однако если предположить, что текущим значением переменной $age является 12, то при выводе строка “The age is: $age” будет преобразована к следующему виду The age is: 12 Ниже приведено еще несколько примеров. echo ‘Это строка’; // выводит Это строка echo ‘Это “строка” в ’строке’ ’; // выводит Это “строка” в ’строке’ echo ‘anb’; // выводит anb Первая строка приведенного фрагмента в комментариях не нуждается. Во втором примере строка ограничена одинарными кавычками. Именно поэтому внутри этой строки можно смело использовать двойные кавычки, а вот одинарные кавычки необходимо замаскировать. В третьей строке демонстрируется вывод специального символа, который входит в состав строки с одинарными кавычками. Как можно увидеть из приведенного примера, вместо ожидаемого вывода символа перевода строки выводится n. 20
Строковый тип Если строка заключена в двойные кавычки, то в ней могут использоваться следующие специальные символы. n перевод строки r возврат каретки t символ табуляции \ обратная косая черта $ символ доллара ” двойная кавычка 21
Строковый тип Во всех остальных случаях обратная косая черта не определяет никакого символа и будет отображаться как обычный символ. Если просмотре строки интерпретатор PHP находит символ доллара ($), то далее синтаксический анализатор переходит к жадному алгоритму разбора и старается захватить как можно больше символов для формирования корректного идентификатора. При необходимости можно ограничить имя переменной, заключив его в фигурные скобки ({}). Например, результатом обработки фрагмента $beer = ‘Heineken’; echo “$beer’s taste is great”; будет Heineken’s taste is great поскольку символ ’ нельзя использовать в идентификаторе. 22
Строковый тип Вот еще один пример echo “He drunk some $beers”; echo “He drunk some ${beer}s”; При обработке первой строки значение переменной $beer выведено не будет, поскольку символ s может относиться к идентификатору и интерпретатор не сможет принять правильное решение. Обработка второй строки приведет к ожидаемому результату: переменная beer будет интерполирована и ее значение будет встроено в результирующую строку. Для оптимизации работы сценария лучше использовать одинарные кавычки. В этом случае интерпретатор PHP не будет анализировать строку для поиска других конструкций языка. 23
Манипуляции со строками В языке PHP определена единственная операция конкатенации строк с использованием операции. (точка). Строку можно рассматривать как массив символов, нумерация которых начинается с нуля, и обращаться к отдельному символу, указывая в фигурных скобках его номер. Например, если в переменной $str содержится строка “abcdefgh”, то обработка следующих двух строк $first = $str{0}; // ‘a’ $last = $str{strlen($str)-1}; // ‘h’ приведет к получению следующего результата a h В языке РНР имеется много встроенных функций, позволяющих манипулировать строковыми значениями. Некоторые из наиболее часто используемых приведены в табл. 24
Манипуляции со строками Имя функции Тип параметра Возвращаемое значение strlen Строка Количество символов в строке strcmp Две строки 0, strpos Две строки Позиция символа в первой строке, который соответствует первому символу второй строки. При отсутствии соответствия возвращается значение false substr Строка и целое Подстрока строки-параметра, начиная с позиции, задаваемой вторым параметром. Если задан третий параметр (целое), то определяет длину возвращаемой подстроки chop Строка, в которой справа удалены все пробелы trim Строка, в которой все пробелы удалены и справа и слева ltrim Строка, в которой слева удалены все пробелы strtolower Строка, в которой все прописные символы если две строки идентичны; отрицательное число, если первая строка лексикографически меньше чем вторая; 1, если вторая строка лексикографически меньше чем первая 25
Массивы В языке РНР массивы представляют собой упорядоченное множество пар “значение/ключ”. Этот составной тип данных оптимизирован таким образом, чтобы его было удобно использовать в качестве обычного массива, списка (вектора), хэш-таблицы, словаря, коллекции, стека, очереди, дерева и, возможно, других структур данных. 26
Преобразование типов Как уже отмечалось, PHP не поддерживает явное определение типа при объявлении переменной. Тип определяется во время выполнения сценария и может меняться в зависимости от контекста использования переменной. Поэтому можно использовать одну и ту же переменную для хранения значений разных типов, например целого или строки. $id = 123; $id = “abc 1”; PHP автоматически преобразует типы переменных, которые входят в состав арифметических, логических и строковых выражений. При этом сами переменные своего типа не меняют. $a = 1; // $a - целое $b = 1 + $a/2; // $b равно 1. 5 $c = “ 10 негритят” + $b; // $c равно 11. 5 27
Преобразование типов Как и в C++, в языке PHP можно принудительно интерпретировать переменную как переменную определенного типа. Для этого нужно воспользоваться приведением типов. Приведение типов может быть как явным, так и неявным. Чтобы выполнить явное преобразование, перед именем переменной в скобках нужно указать имя типа. Например, $int. Value = 1234; $double. Value = (double) $int. Value; $string. Value = (string) $double. Value; Следует заметить, что в отличие от C++, в PHP не существует функционального вида приведения типов, поэтому при использовании следующего фрагмента возникнет ошибка. $str = string($int. Value); // попытка вызова неопределенной // функции string() 28
Преобразование типов Явное приведение типов можно выполнить, воспользовавшись одной из функций intval(), doubleval() или strval(). Например, если в переменной $amount содержится значение 4. 777, то вызов функции intval($amount) приведет к получению результата 4. Приведение типов можно выполнить с помощью следующих конструкций. (int), (integer) — привести к целому типу; (bool), (boolean) — привести к логическому типу; (real), (double), (float) — к типу с плавающей точкой; (string) — к строковому; (array) — преобразовать в массив; (object) — преобразовать в объект. Для приведения переменной к типу возможно также использовать функцию settype(Var, Type). Эта функция имеет два параметра: имя переменной и тип. 29
Преобразование типов Например, ее можно использовать следующим образом. $var 1 = ‘ 2 test’; $var 2 = false; settype($var 1, ‘integer’); settype($var 2, ‘string’); Для преобразования переменной в строку можно просто заключить ее в двойные кавычки. 30
Преобразование типов При преобразовании в логический тип следующие значения считаются ложными (false): целое 0 (ноль); вещественное 0. 0 (ноль); либо пустая строка, либо строка “ 0”; массив с нулевым числом элементов; объект без свойств; специальное значение NULL; любые другие значения считаются истинными (true). К целому типу можно привести переменные логического типа, типа с плавающей точкой и строки. Попытка привести к целому переменную другого типа ведет к неопределенным результатам. 31
Преобразование типов Ложь (false) считается нулем (0), а истина (true) — единицей (1) при преобразовании в целое число, а вещественные числа округляются. Строки, содержащие числовые значения, могут интерпретироваться как числа при явном приведении либо автоматически — в арифметических выражениях. Если строка начинается со строкового представления числа, то это число и будет результатом преобразования. В противном случае численным значением строки будет нуль (0). Если число в строке вещественное, т. е. содержит дробную или экспоненциальную части, то строка будет интерпретирована как вещественное число, иначе — как целое. $real. Value = “ 12. 34 abcd” - 10; //$real. Value - вещественное число 2. 34 $defence = 1 + “РС-20” + “С 300”; // $defence - целое 1 При преобразовании массива в строку будет получена строка, содержащая слово Array, а в случае объекта — строку Object. 32
Преобразование типов Скалярное значение можно преобразовать в массив или объект, при этом получившийся массив будет содержать скалярное значение в качестве своего первого элемента, а объект — в качестве значения атрибута scalar. $var = 12. 34; $array = (array) $var; echo $array[0]; // выводит 12. 34 $obj = (object) “abcd”; echo $obj->scalar; // выводит abcd Тип переменной можно изменить с помощью функции settype(). Например, settype($amount, “integer”) 33
Преобразование типов Если в текущий момент в переменной $amount содержится значение 4. 777, то приведенный выше вызов функции приведет к получению результата 4. Соответственно, тип можно узнать, вызвав функцию gettype(). При этом возвращается строка, соответствующая имени типа переменной-параметра. Строка с именем типа, возвращаемая функцией gettype(), может измениться в последующих версиях PHP, поэтому для проверки типа переменной эту функцию лучше не использовать. Для проверки типа переменной можно воспользоваться специальными функциями вида is_xxx(), например is_array(), is_bool(), is_double() и т. д. Узнать значение и тип переменной позволяет функция var_dump(). Ниже приведен пример, в котором проверяется, является ли переменная массивом. <? php $arr = array(1, 4, 6, 8); if (is_array($arr) && !empty($arr)) { foreach ($arr as $num) { echo $num. ‘ ’; } } ? > 34
Средства вывода информации Любые выходные данные PHP-сценария становятся частью HTMLстраницы, которая генерируется интерпретатором РНР. Другими словами, все выходные данные любого сценария должны иметь вид кода HTML, в который можно встраивать фрагменты клиентских сценариев. Для генерации выходной информации можно воспользоваться одним из трех способов: функциями echo, print() и printf(). Функцию echo можно вызывать как с круглыми скобками, так и без них. При использовании скобок на вход этой функции можно передать лишь один строковый параметр. В противном случае эта функция может обработать список параметров произвольной длины. Например, следующая строка будет абсолютно корректно echo “Oranges are taste <br />”, “Apples are too <br />”; Однако следующая строка окажется некорректной echo(“Oranges are taste <br />”, “Apples are too <br />”); Функция echo не возвращает никакого значения. 35
Средства вывода информации Функция print выполняет аналогичные действия за исключением того, что ей можно передать лишь один параметр. Кроме того, эта функция возвращает значение. Как и в случае функции echo круглые скобки использовать необязательно. Возвращаемое значение свидетельствует об успешности выполнения требуемой операции (1, если все успешно, и 0 в противном случае). Функция print допускает передачу строкового параметра. Однако если в качестве входного используется другое значение, то оно автоматически будет преобразовано к типу string. Функция printf абсолютно аналогична такой же функции в языке С. Ее полезно использовать, если разработчику необходимо полностью управлять форматом выходных данных. 36
Пример Файл example 3 -1. php должен быть размещен в каталоге Web-сервера. <!DOCTYPE html PUBLIC “//w 3 c/DTD XHTML 1. 0 Strict//EN” “http: //www. w 3 c. org/TR/xhtml/DTD/xhtml-strict. dtd”> <!-- example 3 -1. php - Simple example to illustrate out put from a PHP script --> <html> <head> <title> example 3 -1. php </title> </head> <body> <p> <? php print “<b> Welcome to my home page <br />”; print “Today is: </b>”; print date(“l, F j. S”); print “<br />”; ? > </p> </body> </html> Результат выполнения сценария: вывод в окне броузера приветственного сообщения и текущего дня. 37
Комментарии Синтаксис комментариев аналогичен синтаксису C++ — Символы // и # для однострочного; Символы /* и */ для многострочного комментария. <? php echo “Experiment”; // very simple PHP code /* this is a comment from two lines */ ? > 38
Резюме Переменные в РНР явно не объявляются. Их тип определяется автоматически в зависимости от контекста использования переменной. В процессе выполнения сценария тип переменной может изменяться. В языке РНР имеется стандартный набор встроенных типов: integer, double, boolean, string. Для работы с данными различных типов можно использовать различные встроенные функции. При необходимости интерпретатор РНР выполняет неявное преобразование текущего значения переменной к требуемому типу. Такое приведение можно выполнить и явно. РНР предоставляет несколько возможностей вывода информации. Поддержка однострочных и многострочных комментариев. 39
Lecture7-1(ПеременныеPHP)-Web.ppt