Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Программируемый калькулятор

Что такое 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...