Программируемый калькулятор
Что такое PHP? PHP это скриптовый server-side язык программирования, предназначенный в основном для включения в html страницу и выполняемый сервером перед выдачей страницы браузеру. Это не CGI, но вполне заменяет его! PHP очень похож на ASP (существует даже конвертор asp2php), но приспособлен к unix-like системам и чаще всего употребляется с web-сервером apache, хотя может работать и с MS IIS и в принципе с любым другим веб-сервером. Кроме того, PHP3 является объектно-ориентированным. На мой взгляд, основное преимущество PHP - простота, гибкость и скорость выполнения. Мне, например, понадобилось минут 15 для просмотра мануалов и примеров, для того, чтобы перевести весь контент моего сайта на SQL (подробнее с елудющих ШАГ-ах) и написать php-скрипт для выдачи его в html коде с шаблонным дизайном. Зачем так сложно? А вовсе и не сложно. Теперь, чтобы выложить на сайт новую статью или просто новость, я всеголишь добавляю новую запись на sql сервере с помощью MS Access или web-интерфейса sql, написанного кстати тоже на php, а при запросе страницы пользователем соответствующий php-скрипт выуживает из sql то, что ему надо и выдает уже красиво оформленную, готовую страницу. SQL. Вот это является еще одним преимуществом PHP, такое впечатление, что он (PHP) просто рожден существовать в связке apache+php+sql. Для свой работы я выбрал MySQL, который также существует и под linux и под win9x/NT. В качестве иллюстрации простоты php, предлагаю пример, передающий список файлов в текущем каталоге. <HTML><BODY> .... Список файлов: .... <? $dir = opendir("."); while($file = readdir($dir)) echo "$file<BR>"; closedir($dir); ?> </BODY></HTML> Код, помещенный в теги <? и?> не передается браузеру, а выполняется непосредственно на стороне сервера. А выдается то, что выводит команда echo. Я думаю, что человек, мало-мальски знающий хотя бы один язык программирования, поймет этот пример без проблем. Кажется, PHP похож на C? или Perl? или Basic? А вот к стати тот же пример в ООП варианте:
<? $dir = dir("."); while($file = $dir->read()) echo "$file<BR>"; $dir->close(); ?> И ведь вы можете это писать в своем любимом html редакторе! Лично я настолько полюбил этот язык, что пишу в нем и скрипты для linux shell (хотя это уже из области XXX;) и даже под dos/win. А запустить скрипт из шела проще некуда: php3 -q <filename> получается отличный интерпретатор. А вот, для наглядности, еще пример для работы с MySQL: <? $conn=mysql_connect("127.0.0.1"); if (mysql_select_db("db",$conn)) { $res=mysql_query("select * from tabl", $conn); while(($data=mysql_fetch_row($res))) echo("$data[0] $data[1]\n"); } else echo "Error!\n"; ?> Этот скрипт выводит таблицу tabl из базы данных db на локальном MySQL сервере. Установка Хотя инсталяция PHP - дело совсем не хитрое и по крайней мере линуксоиды, отличающиеся умом и сообразительностью;-), а так же уменем вникать в тексты документации на любом языке, с этим делом справляются на р-р-р-р-аз, у виндозистов зачастую возникают странные, на мой взгляд, вопросы. В таком случае целесообразно всетаки рассмотреть инсталяцию PHP, но только под windos. Сразу предупрежу, что способов работы с php существует несколько и я не буду здесь описывать каждый из них, а лишь один и самый простой, на мой взгляд. Также учтите и то, что этот способ не является безопасным (всмысле вашего сервера, читайте security.shtml в мануале от PHP), да и о какой безопасности под виндами может идти речь. Хотя лично у меня стоят Apache, MySQL и PHP - они естественно используются лишь для отладки скриптов, перед выкладыванием их на сервер и эта комбинация не является полноценным вебсервером, поэтому к неу нет доступа извне. Зато очень даже здорово отлаживать скрипты и дизайн, таким образом, всем рекомендую.
Начнем с того, что вам не стоит скачивать и компилировать PHP из исходного кода, это лишнее. Возьмите готовый дистрибутив (у меня он назывался php-3.0.11-win32.zip) и просто скопируйте все файлы туда, где вы хотите содержать php (лично у меня это c:/php3/). Пол дела сделанно! Кстати, кроме самого дестрибутива, вам понадобится еще и документация, валяющаяся на том же сервере (список, html-вариант). Идем дальше. Теперь в первую очередь вам необходимо отредактировать файл php3.ini (оригинал php3.ini-dist). Измените в нем праметр extension_dir=<путь где лежит ваш PHP3 со всеми модулями> (у меня, как говорилось это c:/ php3/), а также уберите коментарии со строк extension= с теми модулями, которые вам будут необходимы (если вы не просекаете и смысл, значит вам они не нужны). И все! Теперь поместите этот файл (php3.ini) в корневой каталог вашей windows (c:\windows обычно). Собственно сам php3 - готов. Что-бы проверить его работу - создайте файл со следующим содержимым: <? echo "Список файлов\n"; $dir = dir("."); while($file = $dir->read()) echo "$file\n"; $dir->close(); ?> и запустите его так <путь к вашему php>/php.exe -q <имя файла>. Для особо талантливых обьясняю подробнее. Если вы поместили все файлы из дистрибутива php в каталог c:/php3/, а созданный вами файл с вышеописанным скриптом называется test.php то запустить его вам нужно будет так: c:/php3/php.exe -q test.php Этот скрипт должен вывести список файлов в текущем каталоге. Следующий шаг - конфигурирование вебсервера для работы с PHP. Если вы используете IIS - ваши проблемы;) (используйте файл php_iis_reg.inf в поставке PHP3), если вы используете apache, то сейчас я вам помогу. Вообще идеология обработки php-сценариев сервером очень проста. Есть такое понятие как mime тип файла, который определяется по расширению, гляньте в файл mime.types и вы сами, надеюсь, все поймете. Файл имеет простой формат: <тип файла> <расширение файла>. Вот мы и вставим в него следующие три строчки: application/x-httpd-php3 php application/x-httpd-php3 php3 application/x-httpd-php3 phtml Что мы этим имеем ввиду? Что файлы с расширением php, php3 и phtml являются приложением (application) типа x-httpd-php3 (а можете и сами название этого типа придумать, дальше поймете зачем это вообще нужно). Есть, к стати, и второй вариант прописывания mime типов, напрямую в httpd.conf вот так: AddType application/x-httpd-php3.php
AddType application/x-httpd-php3.php3 AddType application/x-httpd-php3.phtml После того. Как мы покончили с определнием типов (и все знают этих типов). Нам осталось добавить в httpd.conf всего одну строчку для запуска этих сценариев. Вот эту: Action application/x-httpd-php3 <путь и имя php транслятора> Которая означает, что для файлов типа application/x-httpd-php3 запускать указанную вами прогу. у меня под win эта строчка выглядит так: Action application/x-httpd-php3 /cgi-bin/php.exe То есть я положил сам php.exe в директорию прописанную как /cgi-bin/ и не мучался (добавить три лишние строки) с прописыванием разрешения на запуск из собствненой директории php. Собственно вот и все. Запускайте ваш вебсервер и пробуйте скрипты из архива с документацией от php или описанные мной. Если у вас все таки что-то неработает - смотрите логи от вебсервера. Опишу в кратце еще раз все необходимые действия: 1. скопировать php дистрибутив в выранную вами директорию; 2. соответсвенное конфигурирование php3.ini (добвление этой самой директории) и помещение его в директорию windows; 3. добавление новых mime типов для распознавания документов, содержащих сценарии php; 4. сообщение серверу что делать с документами этих типов (запускать для них php.exe) Основы языка С картинки в родном букваре;) то есть с чтения (или хотя бы просмотра) документации. Не пугайтесь. В конце - концов, если вы собираетесь работать на php вам когда-либо все равно придется заглянуть туда и лучше, если вы это сделаете сейчас, благо мануал у php очень удобный, легкий, не требующий длительного штудирования, но основы языка нужно знать и без чтения тут никак не обойтись. Вообще я потратил не мало времени за написанием скриптов на php и если это время можно измерить сотнями часов, то время, потраченное на поиск нужных функций или решение проблем с осуществлением каких-либо специфических операций, в общем время просиженной за документаций, как ни странно, не более одного часа! Так что еще раз повторю - не пугайтесь и флаг (очки) вам в руки. Начнем с того, что для PHP сущестует 4-е способа отделения его от общего кода HTML (имеется ввиду для интерпретации)
1. <? echo ("SGML инструкции\n");?> 2. <?php echo("XML документ\n");?> 3. <script language="php"> echo ("специально для FrontPage"); </script> 4. <% echo ("ASP-стиль"); %> <%= $variable; # Комментарий "<%echo.." %> Далее необходимо коненчо сказать и о том, что инструкции в PHP отделяются друг от друга сишно-паскалевско-перловым способом - точкой с запятой. Хотя перед закрывающим тегом (?>) точку с запятой ставит не обязательно. <?php echo "This is a test"; echo "This is a test also"?> PHP поддерживает комментарии в стиле 'C', 'C++' и Unix shell. Например: <?php echo "test"; // Комментарий в стиле C++ /* Это многострочный комментарий в стиле C++*/ echo "test2"; echo "Test3"; # Это unix-shell комментарий ?> Типы PHP поддерживает следующие типы данных: · integer (целочисленные) · floating-point numbers или double (числа с плавающей запятой) · string (строки, текст) · array (массивы) · object (обьекты) Преобразование типов происходит следующим образом. Если переменной при равнивается строка (текст в кавычках) то эта переменная становится строковой. Если-жы c ней совершается одна из многих математических функций или она приравнивается численой переменой, она становится численной, причем если приравниваетс яне целому значению - то станет типом double. Пример: $foo = "0"; // $foo строка (ASCII 48) $foo++; // $foo тоже строка "1" (ASCII 49) $foo += 1; // $foo теперь integer (2) $foo = $foo + 1.3; // $foo теперь double (3.3) $foo = 5 + "10 паросят"; // $foo теперь снова integer (15) $foo = 5 + "10 ящиков"; // $foo и по прежнему integer (15) значение в скобках - результирующее значение переменной Преобразовывать типы можно чистА в сишном стиле: $foo = 10; // $foo это integer $bar = (double) $foo; // $bar это double Разрешенный преобразования: · (int), (integer) - cast to integer · (real), (double), (float) - cast to double · (string) - cast to string · (array) - cast to array
К стати, определить тип переменной можно функциями gettype(), is_long(), is_double(), is_string(), is_array() и is_object(). ОБЛАСТЬ ВИДИМОСТИ ПЕРЕМЕННЫХ Во-первых. Все переменные начинаются с символа $ Во-вторых существуют границы определения переменных. Например что-бы использовать глобальные переменные в функциях, необходимо их сначала декларировать как глобальные, иначе вы будете исопльзовать локальные переменные. Поясню на примере: $a = 1; /* глобальное определение */ Function Test () { $a=2; echo $a; /* локальная переменная */ } Test (); echo $a; Таким образом в функции используется локальная, собственная переменная и результатом прогарммы будет вывод чисел 2 и 1, а не 2 и 2, как некоторые могли подумать. Ну а если вы хотите в функции использовать глобальные переменные, необходимо сделать так (декларировать с помощью оператора global): $a = 1; /* глобальное определение */ Function Test () {
global $a; $a=2; echo $a; /* локальная переменная */ } Test (); echo $a; Теперь в функции вы переопредилили глобальную переменную и вывод будет числа 2 и 2. Но есть и другой способ добраться до глобально-определенных данных - через ассоциативный массив $GLOBALS[]. Пример предыдущей программы, реализованный новым способом: $a = 1; /* глобальное определение */ Function Test () { $GLOBALS["a"]=2; echo $a; /* локальная переменная */ } Test (); echo $a;
Обратите внимание переменная в массиве указывается без символа $ Кроме этог о PHP предоставляет возможность исопльзовать статические переменный. Все как в C/C++. Function Test () { static $a = 0; echo $a; $a++; } Test(); Test(); Test(); Результатом выполнения этого скрипта будет вывод чисел 0,1 и 2. ПЕРЕМЕННЫЕ ПЕРЕМЕННЫЕ Скорее всего скоро вам понадобятся переменныес динамически (в ходе работы скрипты) изменяемым наименованием. Поясню на пример, что я имею ввиду: $a = "hello"; $$a = "world"; Данная запись означает, что переменной с именем a мы присваиваем значение "hello". Следующей операцией переменной с именем, хранящимся в переменной с именем a, то есть - переменной hello мы присваиваем занчение "world" echo "$a ${$a}"; тоже самое, что и echo "$a $hello"; В результаты мы получим на экране hello world Дело ненмого усложняется, если вы хотите использовать подобные массивы. Ведь если вы запишете $$a[1] - интерпретатору надо будет знать, что использовать в качестве переменной - $a или $$a (имя, зранящееся в $a). В таком случаем вам прийдется исопльзовать следующий синтаксис - ${$a[1]} в случае, если вы хотите использовать переменную с именем, зранящимся в массиве $a с индексмо 1 и ${$a}[1] в другом случае (если вы хотите использовать элемент 1 массива с именем, зранящимся в переменной $a. Прыжок на месте Мы продолжаем наш концерт, а за одно и рассматривать основы PHP. Сегодня начнем с внешних переменных. HTML Формы (GET и POST) После заполнения пользователем HTML формы PHP может получить доступ к этим данным через переменные, имеющие такие-же название, что и поля в форме. Как всегда продемонстрирую на примере: <form action="foo.php3" method="post"> Name: <input type="text" name="name"> <input type="submit"> </form> Значит после того, как пользователь нажмет в форме кнопку submit в php-скрипт foo.php3 методом post передадутся данные из формы, а обратиться, например к текстовому полю, из этого скрипта можно будет через переменную $name. Кроме того, можно использовать и массивы в качестве названий полей. <form action="array.php" method="post"> Name: <input type="text" name="personal[name]"> Email: <input type="text" name="personal[email]"> Beer: <select multiple name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness </select> <input type="submit"> </form> В результате это скрипт (array.php) может вывести полученные результаты так: echo "Имя: ".$personal["name"]; echo "Email: ".$personal["email"]; for ($i=0;$i<sizeof($beer);$i++) echo $beer[$i]."<br>"; Кроме этого, как известно в форме в качестве submit-кнопки можно применять картику <input type=image src="image.gif" name="sub">. В таком случаем скрипту возвращаются еще две дополнительных переменных, содержащих координаты точки, на которой кликнули мышкой. Это sub_x и sub_y. HTTP Cookies В PHP реалиован также простой способ работы с куками. С помоью функции SetCookie() можно их устанавливать, получать значения, как и в случае с формами - по имени переменной. В случае, если вы ожидаете получить несколько значений от куки имеет резон исопльзовать в качестве имени переменной - массив. Как в следующем примере. SetCookie ("MyCookie[]", "Testing", time()+3600); Существует только одно небольшое ограничение. Так-как куки - это часть HTTP заголовка их следует посылать самыми первыми. То есть грубо говоря, ваш скрипт должен начинаться с установки куки, а потом уже заниматься выводом html кода. Еще один пример, уже полноценного счетчика: $Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600); Переменные окружения И тут все так-же просто. Хотите узнать домашний каталог? В юникс-системах этообычно переменная окружения с именем HOME. Так узнавайте: echo $HOME; Вы также можете работать с переменными окружения через функции Getenv() и putenv() КОНСТАНТЫ Вы можете использовать не только переменный но и константы с помощью функции define(). Взгляните на следующий пример: define("CONSTANT", "Hello world."); echo CONSTANT; обратите внимание на то, что перед именем константы не пишется символа переменной $ и это правильно. Ну и напоследок список предопределенных констант. · __FILE__ Имя файла выполняемого скрипта. · __LINE__ Колличество линий, инетрптетированный на данный момент в этом скрипте. · PHP_VERSION Тут хранится версия PHP. Например: '3.0.8-dev'. · PHP_OS Имя операционной системы, на которой выполняется PHP-скрипт. · TRUE Истина. · FALSE Ложь. · E_ERROR Описывает случившуюся ошибку, продолжение работы после которой невозможно. · E_WARNING Описывает ошибку, после которой продолжается выполнения скрипта. · E_PARSE Описывает синтаксическую ошибку, рпи разоре интерпретатором текста скрипта. · E_NOTICE Просто какое-то сообщения от интерпретатора. Возможно ошибка, а возможно и нет. Вот и все о константах и переменных. Со следующего шага займемся опарторами и выражениями. Программируемый калькулятор Сегодня рассмотрим все возможные операции на всеми возможными типами переменных и их значениями. Арифметические операции А рифметических операция в PHP всего пять, вот они: · $a + $b · $a - $b · $a * $b · $a / $b · $a % $b Я думаю здесь все ясно. Ну можеттолко поясню последнюю операцию, результат ее выполнения остаток от деления $a на $b. Строковые операции А здесь и того меньше! Чисто строковой операцией считается операция сложения двух строк. Причем выглядит она довольно необычно, но практично: · $c = $a. $b; То есть символом этой операции является точка. А результатом ее выполнения будет обыкновенная строка, состоящая из $a и $b Операция присваивания Ну тут вообще ничего сложного, она всегда одна, это знак '=' и естественно этот знак означает, что переменной с лева от него будет присвоенное значение, полученное в результате выполнения каких либо операций или переменной/константы с правой стороны. Причем тут возомжно некоторый С++ -ные варианты, как-то: $a = ($b = 4) + 5; // $a будет равна 9, а $b 4-м. $a += 5; // аналогично $a = $a + 5; $b = "Привет "; $b.= "всем!"; // а$a & $b Побитовое И (AND) налогично $b="Привет всем!" Двоичные операции Аа... и тут вообщем-то ничего нового: · $a & $b Побитовое И (AND) · $a | $b Побитовое ИЛИ (OR) · ~ $a Исключающее или (XOR) · $a << $b Сдвиг влево на $b битов · $a >> $b Сдвиг вправо на $b битов Логические операции Все тоже... · $a and $b И (AND) · $a && $b Тоже самое, что и предыдущее · $a or $b Или (OR) · $a || $b Тоже, что и предыдущее · $a xor $b Исключающее или (XOR) ·! $a Инверсия (NOT) Операции сравнения Здесь будет что-нибудь новое или нет? Даже комментировать эти операции не буду... · $a == $b · $a!= $b · $a < $b · $a > $b · $a <= $b · $a >= $b В PHP существует также, как и в C++, тринарный оператор '?:'. Кто незнает - обьясню на примере. $res= (expr1)? (expr2): (expr3); Результатом этой операции будет значение (expr2), в том случае, если expr1==1 и значение expr3 в противном случае. Где все эти expr1, expr2, expr3 - являются переменными/константами или математиескими выражениями. Такая запись по сути своей аналогична следующей: if (expr1) $res=(expr2); else $res=(expr3); но естественно более лаконична. А собственно об этом и все. Мы рассмотрели все операции, присутсвующие в PHP. Слудующим шагом рассмотрим управляющие структуры (или их еще можно назвать командами). Поуправляем? Мне кажется не стоит попусту лить воду и описывать тут и так всем известные из других языков програмирования структуры управления. Вместо этого я приведу их полный список и все методы их использования. IF Структура: if (выражение) блок_выполнения Пример использования: if ($a > $b) print "a больше, чем b"; if ($a > $b) { print "a больше, чем b"; $b = $a; } ELSE Пример использования: if ($a > $b) { print "a больше, чем b"; } else { print "a не больше, чем b"; } elseif Интересный оператор. Он применяется в случае, когда вам необходимо использовать IF сразу после ELSE Пример использования: if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b"; } if():... endif; Тоже довольно необычная структура. Смысл ее в том, что если условие, записанное в круглых скобах оператора IF оказалось истинной, то будет выполняться весь код, начиная от двоеточия ':' то команда ENDIF; Пример использования: <?php if ($a==5):?> A = 5 <?php endif;?> Или вот еще с использованием вышеописанного оператора ELSEIF if ($a == 5): print "a equals 5"; print "..."; elseif ($a == 6): print "a equals 6"; print "!!!"; else: print "a is neither 5 nor 6"; endif; WHILE Структура: while (выражение): блок_выполнения... endwhile; И примерчик: $i = 1; while ($i<= 10) { print $i++; } do.. while Вообщем-тоничего необычного - цикл, как цикл. Выполняется блок выполнения до тех пор, пока справедливо выражение. Структура: do блок_выполнения while (выражение); FOR Точно такой-же цикл как и в C++. Структура: for (выражение1; выражение2; выражение3) блок_выполнения Хотя - нет. Есть в PHP еще одно дополнение. Структура: for (выражение1; выражение2; выражение3): блок_выполнения;...; endfor; Обратите внимание, на двоеточие перед блоком выполнения. break Старо как мир. Этот оператор позволяет выскакивать из любого цикла (for, while, do.. while) до окончания его выполнения. Пример: $i = 0; while ($i < 10) { if ($arr[$i] == "stop") { break; } $i++; } continue Тоже ничего нового. Этот оператор позволяет пропустить дальнейшее действия блока_выполнения любого цикла и продолжить выполнение с нового круга. Пример: while (выражение) { if (выражение2) continue; действие; }; Такая програма аналогична следующей, без использования continue: while (выражение) { if (!выражение2) действие; };
switch Часто очень необходимый оператор выбора. Хотя все его и так знают, попробую представить ясный пример. Допустим у вас есть следующий участок в программе: if ($i == 0) { print "i равно 0"; } else if ($i == 1) { print "i равно 1"; } else if ($i == 2) { print "i равно 2"; } else print " ниодно условие не прошло" Сэкономить время выполнения данного участка, а так-же представить его более логичным способом и поможет нам этот оператор. Следующий пример совершает действия, аналогичные предыдущему, но в более красивой форме: switch ($i) { case 0: print "i равно 0"; break; case 1: print "i равно 1"; break; case 2: print "i равно 2"; break; default: print " ниодно условие не прошло" } в таком представлении есть и еще одно преимущество. Если вы не поставите оператор break например перед case 1:, то в случае, когда $1 будет равен нулю после вывода на экран сообщения об этом программа пойдет дальше и выведет также сообщение о тов, что $I равна еще и 1 и только после, встретив break; продолжит свое выполнение за пределами switch require Этот оператор действует примерно так-же как и #include в C++. Файл, указанный в кавычках включается в скрипт и выполняется, но только однажды. В файле, включаемом оператором require резонно хранить какие-то даные, необходимые для многих скриптов и соответсвенно влкючать его в эти "многие" скрипты. Структуа его такая: require 'header.inc'; include Структура: include 'func.inc'; Этот оператор позволяет включать код, содержащийся в указанном файле (func.inc в нашем случае) и выполнять его столько раз, сколько программа встречает этот оператор. То есть. Например в файле func.inc у нас хранится программа вывода на экран определенных параметров. Ну и каждый раз, когда нам нужно будет выводить эти параметры мы будем вставлять в текст нашей основной программы include 'func.inc', то есть это в принципе тоже самое, как если-бы мы везьде в таких случаях вставили-бы текст, содеражийся в файле func.inc Обратите внимание. Разница между include и require довольно существенная, поэтому поэкспереминтируйти с ними сами, если вы ее так и не усмотрели.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|