Статьи,обзоры,справочники по PHP

         

Одно замечание по поводу деления целых чисел.


PHP поддерживает операции >, так что, если вам нужна целая часть от деления на число равное степени 2, вы можете делать побитовый сдвиг вправо. Как правило, так как числа с плавающей точкой 64-ёх битные, а не 32-ух битные, все возможные значения целых 32-битных чисел могут быть представлены однозначно, как float, поэтому нет риска ошибки округления, когда делаем (int)(n1/n2). Дополнительные расходы на преобразование к float и обратно можно игнорировать для языков интерпретаторов, таких как PHP, так как механизм PHP сильно оптимизирован (тестирование подтвердило, что выполнение операции $a/$b занимает незначительно больше времени, чем $a>>$b или $a*$b для целых чисел $a и $b).

Автор замечания carl@NOSPAM.thep.lu.se (22-Aug-2001 04:51),

перевод avlarkin@iname.ru (декабрь 2001).

Числа с плавающей точкой. Числа с плавающей точкой могут быть определены каким-либо из ниже перечисленных способов:

$a = 1.234; $a = 1.2e3; $a = 7E-10;


Обозначение e[число n], например E-10 или e2, значит, что число, после которого следует такая запись, умножается на 10 в степени n. Например, 1.2e3 значит 1.2 умножить на 10 в степени 3.

Размер числа float зависит от платформы, по крайней мере максимальное значение заведомо не больше ~1.8e308 и точность числа около 14 цифр после точки десятичной дроби (это 64-битный IEEE формат).



Переполнение Integer числа.


Если вы определяете число выходящее за предельные значения типа integer, оно будет восприниматься интерпретатором php, как float тип, а не Integer. Аналогично, если вы производите операцию, которая возвращает число превышающее максимальные значения Integer, то это число возвращается, как float число (то есть число с плавающей точкой).

$large_number = 2147483647; var_dump($large_number); // вывод: int(2147483647)

$large_number = 2147483648; var_dump($large_number); // вывод: float(2147483648)

// это верно и для шестнадцатеричных чисел: var_dump( 0x80000000 ); // вывод: float(2147483648)

$million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // вывод: float(50000000000)




Перевод в различные системы счисления



string base_convert(string $number, int $frombase, int $tobase)
Переводит число $number (создано как строка в с/с по основанию $frombase) в систему по основанию $tobase. Параметры $frombase и $tobase могут принимать значения от 2 до 36.

int bindec(string $binary_string)
Преобразует двоичное число $binary_string, в десятичное число.

string decbin(int $number)
Возвращает строку, которая является двоичным представлением целого числа $number. Максимальное число, которое ещё может быть преобразовано - 2147483647, которое выглядит как 31 единичка в двоичной системе.
Примечание: Существуют аналогичные функции для восьмеричной и шестнадцатиричной систем. Называются они также, только вместо "bin" ставится "oct" и "hex".





Php_links


Московский Институт Электроники и Математики

Центр Современные Информационные Технологии
и Математическое Образование

Введение

Основы PHP   Функции   Советы   Ссылки Форум



Получение части массива



array array_slice(array $Arr, int $offset [, int $len])
Возвращает часть ассоциативного массива, начиная с пары ключ=>значение сосмещением $offset от начала и длиной $len (если не задан, то до конца массива).
Примечание: Параметры $offset и $len могут быть отрицательными (Задаются по таким же правилам, что и у функции substr( ) смотри базовые функции)
Пример:

В этом разделе:
Cсылки на документацию по PHP

Форумы по PHP

Программное обеспечение

PHP-скрипты

www.php.net   EN

Сайт поддержки PHP, сожержит массу материалов по PHP.

php.fud.ru   RU

Алфавитный справочник по функциям PHP. Описания функций, предельно кратко, зато есть все основные функции.

http://www.webclub.ru/content/programming_php/article-69.html   RU

Хороший перевод оригинального английского описания функций PHP 3.0 на русский язык от webclub (сортировка функций по тематике).

http://php.spb.ru   RU

На этом сайте Вы найдете отличное собрание статей и описаний по практическому программированию на PHP. Прежде чем лезть на форумы с вопросом, советуем заглянуть сюда!

http://www.egor.spb.ru/doc/db/mysql/18.html   RU

Простой html текст с подробным описанием функций php, интерфейса никакого нет. какое отношение имеет к mysql - непонятно. :)

ftp://ftp.omskelecom.ru/Programming/PHP4/php406.chm   EN

Справочник по PHP 4.06, оформленный в виде help-файла.

http://www.phpclub.net   EN

Самый большой форум в России, посвященный проблемам программирования на PHP, поддерживается PHP клубом.

http://forum.mysoft.ru   RU

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

http://www.belarusmedia.com/   RU

Очень "мудрый" форум по PHP, его полезно посетить, если хотите узнать ответ на слжный вопрос по проектированию приложений на PHP.

ftp://ftp.omskelecom.ru/Programming/PHP4/

На этом ftp можно найти поледние версии PHP под win32, а также справочник по функциям

http://www.webscript.ru


Большая библиотека ссылок на PHP скрипты. Есть ократкие описания, сортировка по категориям применения скриптов. Есть форуммы, чаты, галереи, рейтинги, скрипты администрирования и т. д....

http://www.belarusmedia.com/   RU

Очень "мудрый" форум по PHP, его полезно посетить, если хотите узнать ответ на слжный вопрос по методам решения поставленных задач на PHP.





c1999-2001 ITSoft, Александр, Андрей, Оля и Даша

$input=array ("a","b","c","d","e"); $output=array_slice($input,2); //"c","d","e" $output=array_slice($input,2,-1);//"c","d" $output=array_slice($input,-2,1);//"d" $output=array_slice($input,0,3); //"a","b","c"


Примечание:
Если вам необходимо не только возвратить подмассив, начиная с определённого индекса максимальной длины, а ещё и заменить только что указанные элементы, на что-то определённое, то воспользуйтесь функцией
array array_splice(array $Arr, int $offset [, int $len] [, int $Repl]) Её параметры имеют такие же свойства, что и array_slice. Если $Repl не указан, т.е. не указано то, на что заменять, то в этом случае указанные элементы массива просто удаляются.
Пример:

$input=array("red","green","blue","yellow"); array_splice($input,2); // Теперь $input===array("red","green") array_splice($input,1,-1); // Теперь $input===array("red","yellow") array_splice($input,-1,1, array("black","maroon")); // Теперь $input===array("red","green","blue","black","maroon") array_splice($input,1,count($input),"orange"); // Теперь $input===array("red","orange")



Посылка писем через РНР.



Одно из самых мощшых средств РНР - возможность автоматической посылки писем по электронной почте, минуя использование внешних программ и утилит. Функция отсылки встроена в РНР. Это и есть функция mail( ).

bool mail(string $to, string $subject, string $msg [, string $headers])
Посылает сообщение с телом $msg (это многострочная строка, строки которой разделенны символом превода строки)

по адресу $to (можно задать сразу несколько получателей, разделив их адреса пробелами). В случае, если задан четвёртый параметр, то переданная в нём строка вставляется в конце стандартных почтовых заголовков (таких как То, Content-type и т.д.) и перед началом текста письма.
Примечание:

Избегайте переводов строк в конце строки subject, если вы передаёте поле subject во втором параметре функции mail. Функция mail автоматически ставит перевод строки, если параметр $subject не есть пустая строка.
Примечание:

Рекомендуется включить заголовки прямо в текст письма $msg (в начало тела), отделив их от самого письма пустой строкой (как в стандарте НТТР). То же самое применимо и к параметру $subject: лучше задавать в нем пустую строку и указывать заголовок Subject в самом письме.
Примечание:

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

$message= "From: Лист рассылки To: Иванов Иван Иванович Subject: Пробная рассылка Content-type: text/plain; charset=window-1825

Приветствуем Вас! Это письмо послано почтовым роботом. Всего хорошего!"; Mail ("ivanov@ivan.ivanovich.ru", "", $message);


Обратите внимание на то, что заголовок Content-type в некоторых системах обязательно должен стоять последним. Он задаёт, что письмо доставляется как простой текст (text/plain) и что его кодировка Windows (с тем же успехом вы можете задать иное содержимое письма с помощью Content-type, например файл определённого формата). Тело письма отделяется от заголовка пустой строкой, чтобы почтовой программе было понятно, где кончаются заголовки и начинается тело письма.

Смена кодировки
Это письмо будет читаемо в 90% существующих почтовых программ, но чтобы их можно было прочесть и в оставшихся 10% желательно посылать письма не в Windows-кодировке, а в KOI8. Для перекодирования можно использовать функцию convert_cyr_string( ). В Content-type нужно заменить charset на koi8-r. Вывод строки Content-type тогда будет такой (часто charset пишут на слеюущей строке после content-type):


echo("Content-Type: text/plain;\n"); echo(" charset=\"koi8-r\"\n\n");

Вот что вышло:

$message= "From: Лист рассылки To: Иванов Иван Иванович Subject: Пробная рассылка Content-type: text/plain; charset=koi8-r

Приветствуем Вас! Это письмо послано почтовым роботом. Всего хорошего!"; $message=convert_cyr_string($message,"w","k"); Mail ("ivanov@ivan.ivanovich.ru", "", $message);

Если бы мы не позаботились о том, чтобы все заголовки и $subject находились внутри тела письма, то нам бы пришлось использовать convert_cyr_string( ) не один раз, а несколько (для перекодировки параметров).

Проблема с заголовками
При подобном использовании заголовка Content-type возникает проблема, ибо существуют почтовые программы, которые понимают этот заголовок, но не понимают русский текст в поле Subject, если оно стоит до Content-type. Но другие почтовые системы требуют, чтобы Content-type стоял последним заголовком в списке. Чтобы решить эту проблему, проще всего разместить поле Content-type сразу в двух местах - перед первым и после последнего заголовка. Это может показаться весьма надуманным и искуственным методом, на работает отменно. Теперь ваше письмо сможет прочесть любой пользователь, даже если его почтовая программа вообще не настроена ни на какую кодировку.

Другая проблема состоит в том, что функция mail, как правило, работает долго. На машине unix данная функция всего лишь запускает программу /usr/sbin/sendmail. По умолчанию, как правило, программа sendmail не возвращает вам управления до тех пор, пока письмо не будет отправленно. То есть одно или несколько писем вы можете отправлять функцией mail не задумываясь, а если вы хотите отправить 20 писем или более, то поставьте экспиремент: если при отправке 100 писем на различные адреса функцией mail не произойдёт timeout, то вы можете ей спокойно пользоваться. Если же произошёл timeout (в browserе вы не получили ответа), то обратитесь к системному администратору с просьбой проверить настройки функции mail и программы sendmail или используйте решение, описанное здесь.

Одно из решений - полностью завершить вывод HTML документа, после чего записать содержимое вашего письма во временный файл и передать управление программе Perl, которая уже займётся отправкой писем:

fwrite($fd,'From: '.$adr."\n"); fwrite($fd,'Subject: '.$sbj."\n"); fwrite($fd,'To: tst@mail.ru'."\n"); fwrite($fd,"Content-Type: text/plain;\n"); fwrite($fd," charset=\"koi8-r\"\n\n"); fwrite($fd,$letteri); fclose($fd); system('perl ./smail.pl &> error 1>/dev/null 2>&1'); // все дополнительные параметры &> error 1>/dev/null 2>&1

// перенаправляют весь вывод (стандартный и вывод ошибок) // в никуда, чтобы этот вывод не попал в // генерируемый html документ.


в результате которой вышесказанное не


К сожалению, в PHP была ошибка, в результате которой вышесказанное не всегда так для отрицательных чисел. Например, когда вы производите операцию -50000 * $million, результат будет -429496728. Когда оба числа положительны, такой проблемы нет.

Ошибка исправлена в PHP 4.1.0.

В PHP нет операции деления чисел integer (возвращающей челую часть в результате деления двух целых чисел). Например, деление 1/2 даёт результат float 0.5.

var_dump( 25/7 ); // output: float(3.5714285714286)

Приведение переменной к типу integer.


Чтобы перевести переменную в число (привести тип к Integer), используйте (int) или (integer). Например,

$num = (int)"10 yellow pigs"; // result is 10

Как правило, изменять тип переменной не нужно, так как если используется оператор, функция или управляющий элемент, требующие целое число, то приведение переменной к типу число произойдёт автоматически.

FALSE при приведении к integer даёт 0 (ноль),

TRUE даёт 1 (один).

При приведении чисел с плавающей точкой (float) к целым (integer) происходит округление к нулю. Пример:

$num = (int)10.9; // result is 10

Если значение числа float выходит за границы целого числа integer, то результат не определён, так как число float не обладает достаточной точностью, чтобы представить его в виде какого-либо целого числа. В такой ситуации нет ни предупреждения, ни какого-либо сообщения!

Внимание! Никогда не приводите неизвестную дробь к целому числу, так как иногда это приводит к неожиданным результатам.

echo (int) ( (0.1+0.7) * 10 ); // выводит 7!

Для строк смотрите раздел "приведение строк".

Для остальных типов.

К чему приводит приведение других типов к целому числу на данный момент не определено. Впрочем, происходит так, как если вначале приводим тип к boolean, а потом к integer, но данное положение вещей может измениться без каких-либо предупреждений.



"Продвинутое использование PHP блоков"


This is true. This is false.

Как вы думаете? Будет ли работать этот пример, если перед else

будет HTML вывод, например так:
... } ?> TEST <?php else ...

Ответ на вопрос вы найдёте здесь. Подробнее: как происходит обработка php блоков.

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

Управляющие элементы.

Вам должно быть знакомы ниже перечисленные управляющие элементы php:

if else elseif while do..while for foreach break continue switch declare require() include() require_once() include_once()

Выражение - "что угодно, у чего есть значение". Простейшие выражения:

5

$a

$b=4;

$a=$b+$c*3;

$a <= 5 - условное (или логическое) выражение

Любая PHP программа состоит из серии утверждений. Утверждение может быть выражением, вызовом функции, циклом, условным (логическим) выражением или даже пустым утверждением (которое ничего не делает). Утверждение, как правило, завершается точкой с запятой (;). Также утверждения могут быть сгрупированны в группу-утверждений, если их заключить в фигурные скобки. Группа-утверждений сама является утверждением.



Простая форма


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

<INPUT TYPE=TEXT NAME="name" VALUE="Glen Morris">

и в то время, когда выводится страница с этим PHP-кодом, переменная $name имеет значение Glen Morris.

Тогда Вы можете вывести это значение на экран: echo "Hi $name!";

или вставить проверку в условном операторе: if ($name == "Glen Morris") { echo "Please check your email."; }

Это позволяет организовать обработку форм с помощью PHP. Рассмотрим небольшой пример, в котором попросим посетителя ответить на несколько вопросов (указать имя, электронный адрес и еще кое-что) и сформируем выводимую страницу в зависимости от его ответов.

Вначале разделим нашу страницу на две части. Но не будем создавать две отдельные страницы (одна для формы, другая для CGI-скрипта, который эту форму обрабатывает), а создадим одну PHP-страницу, вид которой изменяется в зависимости от результатов анализа данных, введенных посетителем в имеющуюся на этой странице форму.

Вывод формы

Первая функция служит для вывода формы:

<?php

function display_form() {

  global $PHP_SELF;

?>

<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>

Имя:   <INPUT TYPE=TEXT NAME="name"><BR>

Любимый сорт сыра: <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie

                 <INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar

                 <INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella


Когда Вы предпочитаете есть сыр:

                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">На завтрак

                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">В обед

                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">На ужин

                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">Поздно ночью

<INPUT TYPE=HIDDEN NAME="stage" VALUE="results">

<INPUT TYPE=SUBMIT VALUE="Thanks!">

</FORM>

<?php

}

?>

Большая часть представленного выше текста есть обычный HTML-текст, необходимый для формирования формы. Однако есть пара сложных моментов, требующих особого пояснения.

Во-первых, это переменная $PHP_SELF. $PHP_SELF - это удобная форма ссылки, ее значение равно URL текущей страницы. Мы задаем атрибуту TARGET

этой формы значение $PHP_SELF, потому что мы хотим, чтобы эта страница обрабатывала форму. Используя $PHP_SELF

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

Кстати, строка

global $PHP_SELF;

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

Во-вторых, как Вы могли заметить, мы свободно переходим в режим PHP и обратно даже внутри функции. Это полностью законно. PHP умеет игнорировать HTML-код и выделять только PHP-блоки. Это быстрее, чем оставаться в режиме PHP и организовывать вывод HTML, используя echo.



Теперь обратите внимание на атрибут NAME тега INPUT. Вы видите, что в случае, если тип поля ввода есть CHECKBOX, то после наименования поля (в данном случае times[]) стоит пара квадратных скобок, Если же тип поля ввода есть RADIO, то после имени (cheese) таких скобок нет. Это объясняется тем, что поля типа RADIO служат для выбора одного и только одного из вариантов ответа, поэтому значением переменной cheese будет одна строка. Поля типа CHECKBOX (их несколько) позволяют выбрать (или не выбрать) каждый из возможных вариантов, поэтому для сохранения ответов пользователя PHP должен запомнить их в виде массива. Добавление [] после имени переменной times и указывает на то, что в данном случае это массив, а не единичная переменная.

И, наконец, в этом куске кода имеется скрытая переменная с именем stage. Мы используем $stage чтобы сказать программе, хотим ли мы вывести форму или отобразить результаты обработки ответов.

Обработка формы

Теперь рассмотрим функцию process_form()

обработки формы после ввода ответов пользователем.

<?php

function process_form() {

  global $name;

  global $cheese;

  global $times;

  if ($cheese == 'brie') { $cheese_message = 'I love brie.'; }

  elseif ($cheese == 'cheddar') { $cheese_message = 'Cheddar is awesome!'; }

  else { $cheese_message = 'Fresh mozzarella is divine.'; }

  $favorite_times = count($times);

  if ($favorite_times <= 1) {

    $times_message = 'You should eat cheese more often.';

  } elseif ($favorite_times > 1 && $favorite_times < 4) {

  $times_message = 'Those are good times to eat cheese.';

  } else {

    $times_message = 'You are eating too much cheese.';

  }

  echo "Hello $name.";

  echo "$cheese_message $times_message";

}

?>

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



Далее используется функция count() для того, чтобы подсчитать, сколько раз в день ест сыр человек, ответивший на наши вопросы. Если в предыдущем случае мы должны были сравнить ответ посетителя с каждым из возможных значений переменной $cheese, то при анализе значений переменной $favorite_times

можно воспользоваться операциями сравнения "меньше чем" и "больше чем". Знаки && в условном операторе "$favorite_times > 1 && $favorite_times < 4" означают логическую операцию "И" ("and"). То есть $favorite_times должно одновременно быть больше 1 и меньше 4 для того, чтобы условие было выполнено.

Ну, и наконец, выводим введенное человеком имя и наше сообщение для него (нее). Вы, конечно, можете придумать множество более интересных действий, таких как сохранение введенной информации в базе данных или формирование запроса к какому-то хранилищу данных и вывод полученных результатов в красиво оформленном виде.

Формируем Putting the Form Together

Теперь, когда мы имеем эти две функции, остается добавить только маленький кусочек кода для того, чтобы вызвать их в нужной последовательности. Итак, после (или ниже) записи тела функций display_form() и process_form() добавляем:

<?php

if (empty($stage)) { display_form(); }

else { process_form(); }

?>

Здесь мы вначале проверяем, задано ли какое-либо значение переменной $stage. В PHP переменная считается пустой (empty), если ее значение не задано явно (то есть ей никогда не придаются значения по-умолчанию), или ей задано пустое значение (переменной присвоено значение пусто, если она приравнена пустой строке - '', или ей присвоено значение 0). Когда посетитель впервые попадает на нашу страницу, переменная $stage пуста. Поэтому на страницу будет выводиться форма с нашими вопросами; в противном случае мы должны обработать заполненную форму. И это все, что мы хотели сказать об обработке простых форм с помощью PHP.

Первой заповедью веб-программиста, желающего написать более-менее защищенное веб-приложение, должно стать "Никогда не верь данным, присылаемым тебе пользователем". Пользователи - это по определению такие злобные хакеры, которые только и ищут момента, как бы напихать в формы ввода всякую дрянь типа PHP, JavaScript, SSI, вызовов своих жутко хакерских скриптов и тому подобных ужасных вещей. Поэтому первое, что необходимо сделать - это жесточайшим образом отфильтровать все данные, присланные пользователем.
Допустим, у нас в гостевой книге существует 3 формы ввода: имя пользователя, его e-mail и само по себе тело сообщения. Прежде всего, ограничим количество данных, передаваемых из форм ввода чем-нибудь вроде: <input type=text name=username maxlength=20>


Проверка существования.


Функция IsSet($varname) позволяет выяснить определена-ли переменная. Возвращает TRUE, если переменной присваивалось ранее какое-либо значение или если она была фактически определена (например, переменная $foo может быть определена значением 'true', если php скрипт вызвали с параметром script.php?foo=true).

Функция UnSet($varname) позволяет удалить переменную. Соотвественно, теряется значение переменной и функция IsSet($varname) после вызова UnSet($varname) возвращает FALSE.





Работа с блоками текста


Работа с блоками текста:&nbsp Здесь мы рассмотрим функции, которые бывают полезны при однотипной работе с многочисленными блоками текста.

string str_replace(string $from, string $to, string $str)
заменяет в сторке $str все вхождения строки $from на $to и возвращает результат. Исходная строка при этом не меняется. Если нет неоюходимости в какой-нибудь экзотической замене, то рекомендуется использовать именно эту функцию, а не ereg_replase, ибо она работает значительно быстрее. Примечание: C помощью этой функции можно, например заменить все символы перевода строки на их HTML-эквивалент, но для этого может быть применена и функция
string n12br(string $string)

string WordWrap(string $st, int $width=75,string $break="\n")
Эта очень полезна при форматировании текста письма перед отправкой его по адресу при помощи mail( ). Разбивает блок текста $st на несколько строк, завершаемых символами $break, так, чтобы на одной строке было не более $width букв. Возвращается строка, с символами перевода строки, переданными в $break.
Расмотрим пример как мы можем отформатировть текст, предворив каждую строку префиксом ">":

function Cite($OurText, $prefix=">") { $st=WordWrap($OurText, 60-strlen($prefix), "\n"); $st=$prefix.str_replace("\n", "\n$prefix", $st); return $st }



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


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

string str_repeat(string $st, string $number)
Функция "повторяет" строку и возвращает объединённый результат.
Пример:
echo str_repeat("test!", 3);// выводит test!test!test!



Работа со списками


Под списками мы будем подразумевать массивы, ключи которых начинаются с 0 и не имеют пропусков.
sort( )
производит сортировку списка,по значениям в порядке возрастания.

Примечание: Функция rsort ()делает то же, но упорядочивает не по возрастанию, а по убыванию.



shuffle( )
Перемешивает список, переданный ей первым параметром, так, чтобы его значения распределялись случайным образом.
Примечание: Во-первых, изменяется сам массив, а во-вторых, ассоциативные массивы воспринимаются как списки.

Примечание:
Функция использует стандартный генратор случайных чисел, который передработой необходимо инициализировать припомощи srand( )



Символические ссылки.


Символическая переменная - это всего лишь строковая переменная, хранящая имя другой переменной. Оператор разыменования $$ (два доллара)

позволяет получить доступ к переменной по её имени, хранящемся в строковой переменной (в примере выше такое имя хранится в $p, и доступ мы получаем к переменной $a).





Строка может быть определена тремя


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

1. Одиночные кавычки

2. Двойные кавычки

3. Heredoc, Естественный синтаксис (как есть)

Случайные числа



int mt_rand(int $min=0, int $max=RAND_MAX)
Функция возвращает случайное число достаточно равномерно. Числа, сгенерированные ею достаточно равновероятна. Если вы хотите генерировать числа от 0 до RAND_MAX (константа, задающая максимальное случайное число, её можно получить при вызове mt_getrandmax), то задайте соответствующий интервал в параметрах $min и $max.
Примечание: НЕ Забудьте! Перед первым вызовом этой функции запустить mt_srand( ), которая настраивает генератор случайных чисел на новую последовательность.
Пример: Извлечение строки со случайным номером из текстового файла.

for($i=0; mt_rand(0, $i)


Примечание: Функция fgets( ) читает очередную строку из файла, дискриптор которого указан в ей первом параметре, а второй параметр задаёт максимально возможную длину строки.

Этот способ работает в соответствии с теорией вероятностей, т.е. для 1-ой строки вероятность её извлечения будет 100%, для 2-ой - 50% (она перепишется поверх первой), для 3-ей - 33% и т.д.
Примечание: Если файл состоит из 3-х строк, то вероятность извлечения 3-ей - 33%, а 1-ой или 2-ой 66%. Вероятность извлечения 2-ой строки после первой 50%, а 50% от 66% будет также 33%, т.е. вероятность извлечения каждой строки одинакова. Ну, мне уже надоело всё это проверять. Скажу, что для любого количества строк всё также, но если не верите, то проверьте сами, теорию вероятностей небось изучали!

c1999-2001 ITSoft, Александр, Андрей, Оля и Даша


Сортировка массивов



asort( )
сортирует массив, указанный в её параметре так, чтобы его значения шли в алфавитном (если это строки) или в возрастающем (если это числа) порядке. При этом сохраняются связи между ключами и соответствующими им значениями.

Примечание: Функция arsort ()делает то же, но упорядочивает не по возрастанию, а по убыванию.



ksort( )
Практически идентична функции аsort( ) лишь с тем различием, что упорядочивает не по значениям , а по ключам.
Примечание: Функция krsort( ) осуществляет ту операци., что и ksort( ) с таким же отличием.

Примечание:
Если нужно сделать сортировку по более сложному критерию, то следует воспользоваться функцией uksort( ), написав предварительно функцию сравнения с двумя параметрами.

Примечание:
Функция uasort( ) Производит сортировку, сходную с сортировкой uksort( ), с той лишь разницей, что она производится не по ключам, а по значениям.



Теги поддерживаемые PHP.


Примеры. Как определить PHP код в HTML файле:

1. <? echo ("это простейшая команда\n"); ?>

<?= выражение ?> Эта короткая запись аналогична <? echo выражение ?>

2. <?php echo("Если вы используете PHP в ". "XHTML или XML, делайте так\n"); ?>

Точка - это оператор конкатенации строк, здесь "aaa"."bbb"="aaabbb"

3. <script language="php"> echo ("Для некоторых редакторов HTML (например ". "FrontPage) эта форма тегов оптимальна"); </script>

4. <% echo ("Вы можете использовать теги ASP-стиля"); %>

<%= $var; # Это краткая запись для echo $var %>


Более подробная информация (когда какие теги можно использовать) здесь

©1999-2001 ITSoft, Александр, Андрей, Оля и Даша

Примеры. Как определить PHP код в HTML файле:

1. <? echo ("это простейшая команда\n"); ?>

<?= выражение ?> Эта короткая запись аналогична <? echo выражение ?>

2. <?php echo("Если вы используете PHP в ". "XHTML или XML, делайте так\n"); ?>

Точка - это оператор конкатенации строк, здесь "aaa"."bbb"="aaabbb"

3. <script language="php"> echo ("Для некоторых редакторов HTML (например ". "FrontPage) эта форма тегов оптимальна"); </script>

4. <% echo ("Вы можете использовать теги ASP-стиля"); %>

<%= $var; # Это краткая запись для echo $var %>

Первый вариант возможен, только если краткая форма тегов включена. Включить её можно, используя функцию short_tags() (которая есть только в PHP 3), или включив short_open_tag в php.ini конфигурационном файле, или скомпилировав PHP с включённой опцией --enable-short-tags.

Второй пример является наиболее оптимальным, так как работает в большинстве случаев, например, в XML коде (в XHTML документе).

Четвёртый пример работает, только если включены теги стиля ASP, используя установку asp_tags (аналогична установке short_open_tag, в php.ini файле). Поддержка ASP-стиля тегов возможна, начиная с 3.0.4 версии PHP.

Закрывающий тег PHP "съедает" перевод строки, если перевод следует непосредственно за ним. Например, такой код

<?php echo "<B>Example" ?> </B>

эквивалентен одной HTML строке <B>Example</B>

Так же следует отметить, что точка с запятой (;) автоматически добавляется перед закрывающим тегом php, поэтому в конце блока php необязательно ставить точку с запятой, что видно в только что приведённом примере.

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



Точность числа с плавающей точкой.


Довольно часто бывает, что простые десятичные числа, такие как 0.1 или 0.7, не могут быть переведены в их бинарное представление без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10), как правило, вернёт 7, вместо ожидаемого 8, что есть результат примерно такого внутреннего представления числа: 7.9999999999....

Такая ситуация наблюдается так же в случаях, когда невозможно точно определить некоторые дроби в десятичном представлении с конечным числом знаков после точки. Например, 1/3 в десятичном представлении будет 0.333333...

Поэтому, никогда не доверяйте в абсолютной степени результатам вычислений, где используются или могут использоваться числа с плавающей точкой и никогда не сравнивайте такие числа на равенство (никогда не делайте так: if($float1==$float2) - возможно данное выражение почти всегда будет ложным). Если вам всё же нужна высокая точность, придётся использовать математические функции с ограниченной точностью или gmp функции.



Установка типа переменной.


Выше вы только что видели пример, как определить переменную число. Если же у вас уже определена переменная, PHP предусмотрел способ безопасного приведения этой переменной к другому типу: функция settype($varname,$type), где $type - это boolean, integer, floar, string, array, object, null, пытается изменить тип переменной на $type. Безопасной эта функция является, так как в случае невозможного преобразования (например строку "cat" в число PHP преобразовать не умеет,

в отличие от "10 cats") возвращает false (то есть невозможное преобразование не породит ошибку в программе; на практике преобразование вида $num=(int)"cats"; тоже ошибки не породит, но вы не будете знать, что данное преобразование не возможное, не корректное).

Для информации что во что можно преобразовать смотрите разделы по типам переменных (boolean, integer, ...). В конце каждого раздела написанно во что можно данный тип преобразовать и что вы получите в результате преобразования.

PHP блоки в HTML коде.

Когда разборщик PHP обрабатывает файл, он просто ищет специальный тег, который сообщает ему, что надо начать интерпретацию последующего текста, как PHP кода. Далее разборщик "выполняет" (на самом деле подготавливает к выполнению) весь найденный код до того места, где встречает закрывающий PHP тег, который просто говорит разборщику снова пропускать сквозь себя текст без обработки. Именно этот механизм позволяет вам заключать PHP код внутри HTML: всё вне тегов PHP остаётся без изменения, тогда как всё внутри интерпретируется, как PHP код.

Есть четыре типа тегов, в которые можно заключать PHP код в HTML файле. Из них, только два вида тегов

<?php. . .?> и <script language="php">. . .</script>

всегда доступны. Остальные могут работать или не работать, в зависимости от того включены они или выключены в php.ini файле.



Вставка/Удаление элементов



int array_puch(alist &$Arr, mixed $var1 [, mixed $var2,...])
Добавляет к списку $Arr элементы $var1, var2 и т.д. Она присваивает им числовые индексы, также, как это происходит для стандартных [].
Примечание: Если вам нужно добавить элементы не в начало, а в конец массива, то воспользоваться функцией
int array_unshift(list &$Arr, mixed $var1 [, mixed $var2,...]) Причём порядок следования элементов остаётся таким же, они как бы "вдвигаются" в список слева.
Примечание: Если вам нужно добавить всего 1 элемент, то можно сделать и так:

array_push($Arr,1000);//вызываем функцию $Arr=100; //то же, но короче


mixed array_puch(list &$Arr)
Снимает элемент с "вершины" стека (последний элемент списка) и возвращает его, удалив после этого его из $Arr. Если список был пуст, то возвращается пустая строка.
Примечание: Если вам нужно извлечь первый элемент массива, то воспользуйтесь функцией
mixed array_shift(list &$Arr) Причём порядок следования элементов остаётся таким же, они как бы "вдвигаются" в список слева.



собрана полезная информация по функциям


От автора:
В данном документе (разделе) собрана полезная информация по функциям php. Этот документ создавался несколькими авторами, поэтому прошу простить нам возможные опечатки и не строгую структуру раздела. Рекомендую ознакомиться с функцией mail, функциями запуска программ, функциями работы со строками и другими.
Основная функция, которая нам, скорее всего, понадобится при работе с файлами - это возможность открытия файлов. Файлы открываются с помощью функции fopen(). Данную функцию можно использовать для открытия любого файла в файловой системе сервера, либо для открытия файла через HTTP или FTP в Интернете:

int fopen(string  filename, string  mode);

Как можно предположить, аргумент filename является именем открываемого файла; аргумент mode указывает на режим, в котором должен быть открыт файл: для чтения, для записи или дополнения. Он может иметь одно из следующих значений:

   a - Открытие файла только для дополнения. Данные будут дописаны в конец существующего файла; если файл не существует, PHP пытается создать его;

   a+ - Открытие файла для дополнения и чтения. Данные будут дописаны в конец файла; если файл не существует, PHP пытается его создать;

   r - Открытие файла только для чтения;

   r+ - Открытие файла для чтения и записи. Данные будут записаны в начало существующего файла;

   w - Открытие файла только для записи. Существующее содержание файла будет урачено. Если файл не существует, PHP пытается его создать;

   w+ - Открытие файла для чтения и записи. Существующее содержание файла будет урачено. Если файл не существует, PHP пытается его создать.

К этим флагам можно добавить флаг b, указывающий на то, что файл надо обрабатывать, как двоичный, а не как текстовый. Если между двоичными и текстовыми файлами не делается различия, этот флаг просто игорируется.

При успешном выполнении функция fopen() возвращает дескриптор файла (file handle) - целое число, позволяющее ссылаться на файл при последующих вызовах функции; при неудаче функция fopen() возвращает false.


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

   int fclose(int  fp);

В качестве единственного параметра она принимает дескриптор закрываемого файла и в случае успеха возвращает true, а в случае неудачи - false.
Простейшая возможность провести какую-либо операцию с файлом - просто послать содержимое файла в выходной поток. Для этого используется функция fpassthru():

   int fpassthru(int  fp);

Она принимает единственный параметр - дескриптор файла, возвращенный вызовом fopen(). Функция fpassthru() выполняет чтение с текущей позиции в открытом файле и до его конца. Достигнув конец файла эта функция вызывает его закрытие. Функция fpassthru() возвращает true в случае успеха и false - в случае неудачи.
Иногда нам нужно прочесть только часть данных из файла. В PHP есть несколько функций, позволяющих это сделать. Выбор такой функции зависит от данных, которые мы хотим прочесть. Чтобы прочесть строку из открытого файла, можно воспользоваться функцией fread():

   string fread(int  fp,int  length);

Эта функция читает строку длиной до length символов из файла с дескриптором fp:

   if(!$file=fopen("text.txt","r")){

    echo("Невозможно открыть файл");

   } else {

   &nbsp  $text=fread($file,10);

      fclose($file);
   }

Если конец файла достигнут раньше заданной длины length, возвращается текст вплоть до этого места.
Функция fgetc() используется для чтения из файла одного символа:
   string fgetc(intfp);

Единственный параметр, который принимает эта функция,- это дескриптор открытого файла. Возвращаемое значение является строкой из одного символа, прочтенной из файла, или(если достигнут конец файла) false(пустая строка). Хотя этот метод можно использовать для поочередного прочтения всех симводов из файла, очевидно, что для чтения всего файла он неэффективен. Функция fgets() позволяет прочесть строку заданной длины:


   string fgets(int  fp,int  length);
Помимо десткриптора файла fp функция fgets() принимает в качестве аргумента количество символов (плюс один), которые надо прочесть из файла. Обратите внимание, что параметр length на единицу больше фактического количества прочтенных символов, а также на то, что чтение завершится, если будет достигнут символ перевода строки или конец файла, поэтому реальное количество возвращенных символов нельзя предсказать. Функция возвращает строку или false, если произошла ошибка. Функция fgetss() идентичнаfgets(), но все теги HTML и PHP удаляются из строки. Заметьте, что все теги все же учитываются в длине строки, поэтому, если вы вызовете функцию
   $text=(fgetss($file,11));

   где $file начинается со строки

   <P>These tags will be stripped off<P>

значением $text будет "These t", а не "<P>These t".
Наконец, для чтения содержимого файла можно использовать функцию file(), которая возвращает содержимое файла в виде массива. Каждая строка файла будет представлена одним элементом массива(первая строка будет нулевым элементом):
   array file(string  filename);
Обратите внимание, что функция принимает в качестве аргумента строку с именем файла, а не целочисленный дескриптор файла.
Запись в файлы осуществляется аналогичным образом. Для записи строки в файл используются функции fputs() или fwrite(). Их вызов совершенно идентичен:
   int fputs(int  fp, string  string,int(length));
    int fwrite(int  fp, string  string,int(length));

Параметрами служат: дескриптор файла, в который осуществляется запись, строка, записываемая в файл, и(необязательно) количество символов строки, которое нужно записать. В случае успеха функции возвращают true, в случае неудачи - false.

Нам требуется способ перемещения текущей позиции в файле, чтобы иметь возможность чтения или записи по заданному положению в файле. В PHP это достигается благодаря ряду функций.
Простейшей функцией является rewind(). Она устанавливает текущую позицию в начало файла:
   int rewind(int  fp);
Единственным параметром здесь является дескриптор соответствующего файла. Возвращаемым значением является true в случае успеха и false - в случае неудачи.
Для перемещения на заданную позицию в файле используется функция fseek():
int fseek(int fp, int offset);
Аргумент fp является дескриптором файла;offset является чилом байт или символов от начала файла.
Обратите внимание, что fseek() возвращает 1 при ошибке, а в случае успеха -0.
В PHP4 fseek() принимает необязательный третий аргумент, который может иметь следующие значения:SEEK_SET(offset отсчитывается от начала файла), SEEK_CUR(offset отсчитывается от текущей позиции в файле) и SEEK_END(offset прибавляется к концу файла).
Нам может также понадобиться узнать текущую позицию в файле. Это можно сделать с помощью функции ftell():
    int ftell(int  fp);
Она просто возвращает позицию в файле с дескриптором fp.


Другой полезной функцией является функция feof(), которая указывает, находится текущая позиция в конце файла или нет:
    int feof(int  fp);
Она возвращает true, если текущая позиция в файле с дескриптором fp находится в конце файла, или происходит ошибка. В противном случае возвращается false. Эта функция обычно используется при циклическом проходе по файлу.

Помимо чтения и записи в файлы в PHP можно производить над ними более фундаментальные операции: копировать их из одного каталога в другой, полностью удалять их или давать им новые имена.
Для копирования файла используется функция copy():
    int copy(string  source,string  destination);
Она копирует файл с именем, указанным в аргументе source, в место, указанное в аргументе deatination. Как и можно ожидать, true возвращается в случае успеха, false - в случае неудачи. Чтобы сохранить резрвную копию файла в каталог /temp/, параллельный текущему каталогу, эту функцию можно использовать таким образом:
   $filename="text.txt";
   copy($filename,"../temp/".$filename);
Если требуется удалить файл навсегда, можно воспользоваться функцией unlink()

   int unlink(string  filename);
Она удаляет указанный файл и возвращает true в случае успеха и false- в случае ошибки.
Для переименования файла используется функция rename()

   int rename(string  oldname, string   newname);
Она изменяет имя файла oldname на заданное в аргументе newname. Функция возвращает true в случае успеха и false - в случае ошибки.

Перед тем, как удалять или переименовывать файлы, неплохо было бы убедиться в том, что мы точно представляем, с каким файлом имеем дело. PHP предоставляет ряд функций, которые возвращают информацию о данном файле.
Во-первых, хотелось бы убедиться, что данный файл существует. Для этого можно использовать функцию file_exists()
    int file_exists(string  filename);
Параметром этой функции является имя проверяемого файла. Функция возвращает true, если файл существует, и false- в противном случае.
Также может потребоваться проверить размер или тип файла. Для этого в PHP есть функции filesize


и filetype:
   int filesize(string  filename);
Эта функция возвращает размер указанного файла в байтах или false в случае ошибки.
Функция filetype() возвращает строку, указывающую тип данного файла:
    string filetype(string  filename);
Возвращаемое значение может быть false в случае ошибки или одним из следующих строковых значений:
   "fifo"-объект является FIFO(именованным каналом);
   "char"- объект является символьным устройством;
   "dir"- объект является каталогом;
   "block"- объект является блочным устройством;
   "link"- объект является символической ссылкой;
   "file"- объект является обычным файлом;
   "unknown"- тип файла невозможно определить.
Кроме функции filetype() есть еще несколько функций, которые можно использовать для определения принадлежности файла к определенному типу. Этими функциями являются:
    Boolean is_dir(string  filename);
   Boolean is_executable(string  filename);
   Boolean is_file(string  filename);
   Boolean is_link(string  filename);
Эти функции возвращают true, если указанный файл является каталогом, исполняемым файлом, обычным файлом и символической ссылкой, соответственно.
Существуют также две функции, указывающие, возможны ли чтение и запись в файл:

   Boolean is_readable(string  filename);

   Boolean is_writeable(string  filename);

Простейшей из функций для работы с целыми каталогами является функция chdir(), устанавливающая текущий каталог:

   int chdir(string  directory);
Она делает указанный каталог текущим.
В PHP есть четыре функции, которые можно использовать для просмотра данного каталога. Во-первых, требуемый каталог нужно открыть:   
int opendir(string  path);
Функция opendir() открывает каталог, путь к которому указан в ее единственном аргументе, и возвращает "дескриптор каталога", представляющий собой целое число, которое можно использовать для ссылки на открытый каталог при последующих вызовах функций.
Открыв каталог, можно читать находящиеся в нем "записи":
   string readdir(int   dir_handle);
Эта функция возвращает имя очередной записи в каталоге. Единственным параметром является дескриптор каталога, полученный от функции opendir(). Если записей больше нет или дескриптор каталога недействителен, функция возвращает false. Поэтому эту функцию можно использовать в операторе while() для просмотра всех записей в каталоге. Когда будет достигнут конец, будет возвращено false.
Однако, при этом осуществляется перемещение по каталогу только в одном направлении. Для перемещения по каталогу от конца к началу используется функция rewinddir():
   void rewinddir(int  dir_handle);
Параметром функции является дескриптор каталога, полученный из вызова opendir(). Эта функция устанавливает текущую запись на первую запись в каталоге, поэтому можно начать сначала.
Завершив работу с каталогом, его можно закрыть и освободить ресурсы:

   void closedir(int  dir_handle);
Снова единственный параметром является дескриптор каталога.

Также можно изменять саму структуру каталогов, создавая и удаляя каталоги. Для создания каталога используется функция mkdir():
   int mkdir(string  pathname, int  mode);
Первый параметр является именем пути для создаваемого каталога, второй указывает права доступа к каталогу в UNIX(в Windows этот параметр игнорируется), обычно задаваемые в виде восьмеричного числа (начинающегося с нуля). Возвращаемым значением является true, если вызов функции был успешен,и false- в противном случае.
При наличии необходимых прав можно удалить каталог из сценария PHP. Для этого в PHP есть функция rmdir():
   int rmdir(string  dirname);
Обратите внимание, что эта функция удаляет только пустые каталоги.

Вывод текста



echo (string arg1, string [argn]...)

Выводит все параметры ("печатает" в стандартный буфер вывода stdout содержимое переменных или иных переданных вами параметров. В нашем случае, как правило, вывод происходит в генерируемую html страницу, начиная с текущей позиции).
Примечание:

По большому счёту, echo( ) вовсе не функция, а языковая конструкция. В зависимости от того, как вы хотите передать параметры, можно ставить или не ставить круглые скобки.


Рассмотрим несколько примеров:

echo "Hello World";

// Можно выводить переменные внутри фразы. // Пояснения этой загадочной фразы в разделе строки.

$foo="foobar"; $bar="barbaz"; // Отличие одинарных кавычек от двойных узанайте // щёлкнув здесь.

echo "foo is $foo"; // foo is foobar

//если использовать апострофы вместо кавычек echo 'foo is $foo'; // foo is $foo

//при выводе нескольких переменных echo $foo; // foobar echo $foo,$bar; // foobarbarbaz


Вообще-то вы и сами легко справитесь с познанием echo( ), поэтому более подробной информации не привожу.

(В Perl аналогом данной функции является фнукция print)



Запуск внешних программ



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

tring system(string $command [, int& return_var])
запускает внешнюю программу, имя которой передано первым параметром и выводит результат работы программы в выходной поток, т.е. в броузер. (Последнее обстоятельство сильно ограничивает работу функции). Но, если в функцию передан второй параметр - переменная (не константа), то в неё помещается код возврата вызванного процесса.
Примечание: Полагаю, и так ясно, что с помощью system() можно запускать только программы, в которых вы абсолютно уверены. В частности, НИКОГДА не передавайте функции данные, пришедшие из броузера пользователя, сначала не обработав их - это может принести с собой массу проблем, если например будет запущена какая-нибудь разрушительная утилита, например rm -R ~/, которая очень быстро очистит ваш каталог!
Примечание: Если вы хотите избежать вывода данных в броузер, то воспользуйтесь функцией popen( ) или exec( ). Но, если вы хотите, чтобы данные попали прямиком в броузер, притом никак не исказившись, то воспользуйтесь функцией PassThru( ).

string exec(string $command [, list& $array] [, int& $return_var])
Запускает указанную программу или команду, но ничего не выводит в броузер. Вместо этого функция возвращает последнюю строку из выходного потока запущенной программы и, если задан параметр $array (обязатель должне быть переменной), то он заполняется списком строк в выходном потоке - по одной строке на элемент. При задании параметра-переменной return_var код возврата запущенного процесса будет помещён в эту переменную.

string EscapeShellCmd(string $command)

Применяется в тех случаях, когда нам всё же необходимо передать данные из броузера, например, в функцию system( ) или exec( ). Эти данные должны быть соответствующим образом обработаны (во избежание больших неприятностей). Например, можно защитить все специальные символы обратными слэшами. Для этого и используется функция EscapeShellCmd( ).
Пример: Чаще всего функцию используют в таком контексте. Здесь пременная $to_directory пришла от пользователя.

system("cd".EscapeShallCmd($to_directory));


string PassThrue(string $command [, int& $return_var])


Функция запускает указанный в её первом параметре процесс и весь её вывод направляет прямо в броузера без изменений, один-в-один. Она может пригодиться, если вы воспользовались какой-нибудь утилитой для генерации изображения "на лету", оформленной в виде отдельной программы. Но в РНР есть и более мощный функции для работы с графической информацией.



Жёсткие ссылки.


Жёсткие ссылки являются синонимами переменных. Определить такую переменную синоним можно так:

$b = &$a;

Теперь $a является той же самой переменной $b, но с другим именем, и наоборот. Можно рассматривать переменную $b, как копию переменной $a, которая по своему значению всегда совпадает с $a, хотя говорить "копия" в данном случае не правильно.

Отметим, что многоуровневые ссылки в PHP не поддерживаются.

Пример жёсткой ссылки на элемент массива:

'aaa', 'b' => 'bbb'); $b=&$A['b']; // теперь $b - то же, // что и элемент с индексом 'b' массива ?>



Assign( (пара key,value) или ( array(пары key value) )


Метод assign() сопоставляет значения переменным. С тем чтобы переменная в шаблоне была заменена, ей должно быть сопоставлено значение. Есть два вида сопоставления, между которыми есть некоторые важные отличия. Простой вид состоит в том, чтобы взять массив и скопировать все пары ключ/значение из массива в FastTemplate. В FastTemplate есть только один такой массив, поэтому при повторном сопоставление значения какой-либо переменной предыдущее значение теряется.

$tpl->assign(TITLE => "king kong"); $tpl->assign(TITLE => "godzilla"); // вместо "king kong"



АВТОР


Оригинальный модуль для Perl CGI::FastTemplate написал Jason Moore jmoore@sober.com

Перевод на PHP3 выполнил CDI cdi@thewebmasters.net

PHP3 Version Copyright (c) 1999 CDI, cdi@thewebmasters.net, All Rights Reserved.

Perl Version Copyright (c) 1998 Jason Moore jmoore@sober.com. All Rights Reserved.

Эта программа является свободным программным обеспечением; вы можете распространять ее и/или модифицировать, не выходя за рамки GNU General Artistic License со следующими оговорками:

Изменения или модификации должны сохранять указанные авторские права (Copyright). Изменения или модификации должны быть представлены обоим АВТОРАМ.

Эта программа выпускается на условиях General Artistic License.

Эта программа распространяется с надеждой, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ПОЛЕЗНОСТИ или ПОДХОДЯЩЕСТИ ДЛЯ ОПРЕДЕЛЕННОГО ПРИМЕНЕНИЯ. Смотрите более подробные комментарии в Artistic License. Это программное обеспечение распространяется КАК ЕСТЬ (AS-IS).

Высылайте отчеты об ошибках или комментарии ТОЛЬКО К ЭТОЙ ВЕРСИИ ДЛЯ PHP на адрес

CDI, cdi@thewebmasters.net.

Последняя версия этого класса должна быть доступна по следующему адресу:

http://www.thewebmasters.net/php/



Class


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

items[$artnr] += $num; }

// Уберем $num штук товара $artnr из корзины

function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?>

Здесь определен класс с именем Cart, который состоит из ассоциативного массива товаров в корзине и двух функций, добавляющих и убирающих товары из этой корзины. Чтобы не было путаницы в дальнейшем, назовем классом определение типа, а объектом - конкретную реализацию класса (переменную).

Внимание

Следующие предупреждения верны для PHP 4.

Имя stdClass является внутренним для Zend и зарезервировано. Вы не можете назвать класс stdClass в PHP.

Функции __sleep и __wakeup в классах PHP являются "волшебными". Вы не должны использовать эти имена в любых ваших классах, до тех пор, пока не захотите использовать "волшебные" свойства, связанные с ними. Далее приводится более подробная информация.

PHP резервирует все функции, чьи имена начинаются с __, как "волшебные". Рекомендуется не использовать такие функции до тех пор, пока вы не захотите записать "волшебные" свойства.

Примечание:

В PHP 4 для переменных var

допускаются только константные инициализации. Для инициализации переменной неконстантным значением, вам нужно инициализировать функцию, автоматически вызываемую при создании объекта. Такая функция называется конструктором (см. ниже).

todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* и т.д. */ } }

Классы - это типы, то есть они идентичны встроенным типам. Я долго бился над переводом этого предложения. Спасибо С. Семагину за вариант перевода. Тем не менее, не будучи достаточно уверенным в качестве перевода, привожу оригинал предложения: "Classes are types, that is, they are blueprints for actual variables".

Вы создаете переменную выбранного типа посредством оператора new.


add_item("10", 1);

$another_cart = new Cart; $another_cart->add_item("0815", 3);


Здесь создаются объекты $cart и $another_cart, оба класса Cart. Функция add_item() объекта $cart вызывается для добавления 1 штуки товара с номером 10 к $cart. 3 штуки товара номер 0815 добавляются к $another_cart.

И $cart и $another_cart включают функции add_item(), remove_item() и переменную items. Это - различные функции и переменные. Вы можете думать об объектах, как о каких-то похожих каталогах в файловой системе. Так, в файловой системе могут находиться различные файлы README.TXT, поскольку они могут быть в разных каталогах. Как и в каталогах, где вы вводите полный путь для достижения файла из корневого каталога, вы определяете полное имя функции, которую хотите вызвать. В терминах PHP 4, корневой каталог - это глобальное пространство имен, разделитель пути есть символ ->. Таким образом, имена $cart->items и $another_cart->items указывают на две разные переменные. Напоминаем, что переменная именуется $cart->items, а не $cart->$items, так как у переменной в PHP только один знак доллара.



// правильно, один $ $cart->items = array("10" => 1);

// ошибка, поскольку $cart->$items становится $cart->"" $cart->$items = array("10" => 1);

// правильно, но может быть, а может и не быть тем, // что ожидается: $cart->$myvar становится $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1);


Внутри определения класса вы не знаете, под каким именем объект будет доступен в вашей программе: на момент описания класса Cart неизвестно, что позже объект будет поименован $cart или $another_cart. Таким образом, вы не можете записать $cart->items внутри самого класса Cart. Вместо этого для получения возможности указывать на свои собственные функции и переменные, класс может использовать псевдо-переменную $this которая может быть озвучена как "мой собственный" или "текущий объект". Таким образом, '$this->items[$artnr] += $num' можно прочесть как "добавить $num штук к счетчику товара $artnr в моем массиве товаров" или "добавить $num штук к счетчику товара $artnr в текущем объекте".

Перевод на русский язык © Алексей Мельник, 2001.






Clear()


Замечание: Все функции clear() предназначены для использования где угодно, где ваши скрипты устойчивы. Они обычно не нужны, если вы пишете CGI-скрипты.

clear() Очищает внутренние ссылки, которые сохраняют данные, переданные parse(). clear() принимает отдельные ссылки или массивы ссылок в качестве аргументов.

Часто clear() используется в конце скрипта:

$tpl->FastPrint("MAIN"); $tpl->clear("MAIN");

или

$tpl->FastPrint("MAIN"); $tpl->FastPrint("CONTENT"); $tpl->clear(array("MAIN","CONTENT"));

Будучи вызванной без аргументов, функция удаляет ВСЕ ссылки, которые были установлены с использованием parse().



Clear_all()


Очищает модуль от любых данных, кроме каталога ROOT. Эквивалентно следующему:

$tpl->clear_define(); $tpl->clear_href(); $tpl->clear_tpl(); $tpl->clear_parse();

На самом деле, функция именно это и делает.



Clear_define()


Очищает внутренний список, в котором сохраняются данные, переденные для:

$tpl->define();

Замечание: Хэш, в котором содержатся загруженные шаблоны, не будет затронут этим методом. (Смотри clear_tpl()) Принимает в качестве аргумента отдельный файловый хэндл, массив файловых хэндлов или ничего. Если нет аргумента, функция очищает ВСЕ файловые хэндлы.

$tpl->define( array( MAIN => "main.tpl", BODY => "body.tpl", FOOT => "foot.tpl" ));

// здесь какой-то код

$tpl->clear_define("MAIN");



Clear_dynamic($Macro)


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

$tpl->clear_dynamic("row");

полностью удалит все неразобранные динамические блоки с именем ``row'' из родительского шаблона. Этот метод ничего не сделает, если шаблон уже был разобран! (Так как необходимые ему строки BEGIN и END удаляются в процессе разбора.) Этот метод удобен, когда вы работаете с базой данных, и вместо ``rows'' вам придется или не придется ничего выводить в шаблон. Если запрос к базе данных ничего не вернул, вы можете вычистить строки, котормы вы описали, как будет представлен результат запроса на странице.



Clear_href(KEY)


Удаляет данную ссылку из списка ссылок, который строится с использованием:

$tpl->assign(KEY = val);

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

(Так же, как clear_assign() )

$tpl->assign( array( MOVIE => "The Avengers", RATE => "Sucked" ));

$tpl->clear_href("MOVIE"); // Теперь только {RATE} находится в массиве assign()



Clear_tpl()


Очищает внутренний массив, в котором сохраняется содержание шаблонов. (Если они были загружены) Если у вас проблемы с тем, что изменение шаблона не отражается на работе скрипта, попробуйте добавить этот метод в ваш скрипт.

$tpl->define(MAIN,"main.tpl" ); // assign(), parse() и т.д., и т.п. ...

$tpl->clear_tpl(MAIN); // Загруженный шаблон теперь выгружен.



Define( array( пары key,value ) )


Метод define() сопоставляет имя шаблона другому (обычно более короткому) имени;

$tpl = new FastTemplate("/путь/к/шаблонам");

$tpl->define( array( main => "main.tpl", footer => "footer.tpl" ));

Это новое имя вы будете использовать для того, чтобы сослаться на шаблон. Имена файлов не должны появляться где-либо, кроме метода define().

(Замечание: Это обязательный шаг! Он может показаться лишним и раздражающим, когда вы работаете с тривиальным примером, вроде того, что приведен выше. Но когда вы имеете дело с множеством шаблонов, очень удобно ссылаться на них по именам, которые не связаны с именами файлов.)

СОВЕТ: Поскольку define() фактически не загружает шаблоны, будет быстрее и более понятно определить все шаблоны одним вызовом define().



Define_dynamic($Macro, $ParentName)


Nino Martincevic, don@agi.de, спросил меня письмо по электронной почте о том, как бы сделать что-то вроде этого, и я подумал, что идея очень хороша, немедленно сел и сделал...

Вы можете определять динамическое содержимое внутри статического шаблона. (Списки) Вот пример использования define_dynamic();

$tpl = new FastTemplate("./templates");

$tpl->define( array( main => "main.tpl", table => "dynamic.tpl" ));

$tpl->define_dynamic( "row" , "table" );

Это сообщает FastTemplate, что помещенный внутрь ``table'' шаблон является динамическим блоком, который называется ``row''. В старых версиях FastTemplate (pre 0.7) шаблон ``row'' должен был быть определен собственным файлом. Вот каким образом динамический блок можно вписать в файл шаблона:

<!-- NAME: dynamic.tpl --> <table>

<!-- BEGIN DYNAMIC BLOCK: row --> <tr> <td>{NUMBER}</td> <td>{BIG_NUMBER}</td> </tr> <!-- END DYNAMIC BLOCK: row -->

</table> <!-- END: dynamic.tpl -->

Синтаксис строк BEGIN и END должен быть ИСКЛЮЧИТЕЛЬНО точным. Он чувствителен к регистру символов. Блок кода начинается с новой строки. В строках BEGIN и END не может быть НИКАКОГО ДРУГОГО ТЕКСТА (хотя вы можете добавить любое количество пробелов в начале и в конце строки). Формат строки должен быть следующий:

<!-- BEGIN DYNAMIC BLOCK: handle_name -->

Строка должна точно соответствовать примеру, вплоть до расстояния между буквами. Это же верно для строки END. Строки BEGIN и END не могут быть разнесены на несколько строк. Теперь когда вы вызываете метод parse(), FastTemplate автоматически выделит динамический блок, отделит его от основного шаблона, и будет использовать его так, как если бы вы определили его как отдельный шаблон. От вас ничего не требуется делать, чтобы это заработало — просто определите динамический блок, а FastTemplate позаботится об остальном. Внутри этого архива должен быть файл define_dynamic.phtml, который является рабочим примером использования динамических блоков.

Есть несколько правил использования динамических блоков — динамические блоки не должны включаться внутрь других динамических блоков — поведение класса БУДЕТ очень странным. Вы МОЖЕТЕ иметь вложенность более одного динамического блока на странице, но, разумеется, два блока не могут использовать один и тот же хэндл. Отлов ошибок при использовании define_dynamic() прост, насколько это возможно. Если вы определили динамический блок, а FastTemplate не смог его обнаружить, не будет выдано никаких сообщений об ошибках, только странный результат работы. (FastTemplate не добавит динамические данные и не вернет их как часть страницы.) Поскольку строки BEGIN и END вырезаются из результата работы после разбора, то если вы когда-нибудь увидите строки BEGIN и END в разобраном результате, это означает, что FastTemplate не смог найти динамический блок.



Define_nofile() псевдоним: define_raw()


ЭТИ МЕТОДЫ НЕ ПЕРЕНЕСЕНЫ В PHP ВЕРСИЮ

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



ДОКУМЕНТАЦИЯ


Sascha Schumann написал хорошее руководство по обучению FastTemplate. Оно располагается на веб-сайте PHPBuilder.com по адресу:

http://www.phpbuilder.com/

Это модифицированная версия страницы руководства к CGI::FastTemplate, изначально написанной Jason Moore jmoore@sober.com. Простите, если я убрал не все перлизмы из кода примеров.

Это не полный перевод, методы define_nofile(array()), и/или define_raw(array()) не реализованы в этом переводе, так как они мне не понадобились. Несколько методов реализованы по-другому (в основном, из-за более строгих требований PHP к типам данных). Функциональность каждого метода осталась прежней. Метод define_dynamic() является отличием данного перевода на PHP и не присутствует в версии для Perl.

Метод объявления переменных изменен по сравнению с версией для Perl с $(A-Z0-9_)+ на {(A-Z0-9_)+}. Это означает, что вам придется исправить все ваши шаблоны. Открывающая и закрывающая фигурные скобки обеспечивают существенное ускорение работы и построение более точных шаблонов.

Перевод на русский язык данной страницы руководства FastTemplate 1.1.0 выполнил Антон Лыков, last@mv.ru. Все замечания и пожелания по переводу руководства FastTemplate на русский язык принимаются по электронной почте.



Extends


Часто вам нужны классы с переменными и функциями, похожими на другой существующий класс. Фактически, является хорошим тоном программирования определить базовый класс, который может использоваться во всех ваших проектах и затем адаптировать его к нуждам каждого конкретного проекта. Для реализации такой возможности, классы могут быть расширениями других классов. Расширенный, или наследуемый, класс включает все переменные и функции базового класса (так называемое "наследование", означающее факт, что ничто "не умирает") и те, что вы добавите в расширенном определении. Невозможно "урезать" класс, другими словами, удалить определение любой существующей функции или переменной. Расширенный класс всегда зависит от единичного базового класса, другими словами, множественное наследование не поддерживается. Классы расширяются с использованием ключевого слова 'extends'.

class Named_Cart extends Cart { var $owner;

function set_owner ($name) { $this->owner = $name; } }

Здесь определяется класс Named_Cart, включающий все переменные и функции Cart, плюс дополнительную переменную $owner и дополнительную функцию set_owner(). Вы создаете именованную корзину обычным образом, и можете устанавливать и смотреть владельцев корзин. Разумеется, вы можете использовать "нормальные" функции корзины в именованной корзине:

$ncart = new Named_Cart; // Создать именованную корзину $ncart->set_owner("kris"); // Задать имя владельца print $ncart->owner; // Напечатать имя владельца $ncart->add_item("10", 1); // (свойство, унаследованное // от cart)

Перевод на русский язык © Алексей Мельник, 2001.



FastPrint(HANDLE)


Метод FastPrint() печатает содержимое названной переменной. Если не передано никакой переменной, то он печатает последнюю переменную, которая использовалась при вызове parse(). Как мне кажется, это резонное поведение по умолчанию.

$tpl->FastPrint(); // в продолжение последнего примера // напечатает значение MAIN

$tpl->FastPrint("MAIN"); // то же самое

Этот метод сделан для вашего удобства. Если вам понадобится печатать куда-то еще (в сокет, в файловый хэндл), вам сначала захочется получить с помощью fetch() ссылку на данные:

$data = $tpl->fetch("MAIN"); fwrite($fd, $data); // сохранить в файл



Fetch(HANDLE)


Возвращает необработанные данные из разобранного хэндла.

$tpl->parse(CONTENT, "main"); $content = $tpl->fetch("CONTENT"); print $content; // печатает в STDOUT fwrite($fd, $content); // записывает в файловый хэндл



Формы HTML (GET и POST) Когда


h2>Определение типов переменной

Так как PHP определяет типы переменных и конвертирует их (обычно) по необходимости, не всегда очевидно какого типа данная переменная в определенный момент времени. PHP включает несколько функций, помогающих найти тип переменной. Это gettype(), is_array(), is_float(), is_int(), is_object() и is_string().

Перевод на русский язык © Алексей Мельник, 2002.



Статьи,обзоры,справочники по PHP


Этот метод вернет значение переменной, которое было ей сопроставлено с помощью assign(). Это позволяет вам легко передавать переменные между внутренними функциями, используя класс FastTemplate для поддержки ``глобализации'' переменных. Например:

$tpl->assign( array( TITLE => $title, BGCOLOR => $bgColor, TEXT => $textColor ));

(когда-то позже...) $bgColor = $tpl->get_assigned(BGCOLOR);



Классы и объекты


Содержаниеclass extendsКонструкторы::parentСериализация объектов - объекты в сессиях"Волшебные" функции __sleep и __wakeupУказатели внутри конструктора



Основы синтаксиса


СодержаниеСкрытие от HTMLРазделение инструкцийКомментарии



Переменные


СодержаниеОсновыПредопределенные переменныеОбласть действия переменных"Меняющиеся" переменныеВнешние переменные PHP



ИМЯ


FastTemplate 1.1.0 - расширение PHP для управления шаблонами и замены переменных.



Книги, которые мы выбираем.



Купить!
Хьюгс С., Змиевский А. PHP. Руководство разработчика

Что может быть лучше, чем чтение основ? Возможно, только исходники :-)). Эта книга - от авторов PHP и этим почти все сказано. Книгу отличает ориентация на решение конкретных задач. Четкий и продуманный характер подобранных задач позволяет получить рецепты на все случаи повседневной практики программирования. Каждое решение подробно комментируется, что позволяет не только понять методологию программирования, но также и стимулирует нахождение наиболее эффективных способов решения сложных проектов. Рекомендуется в качестве настольного руководства для разработчиков Internet-приложений любой квалификации.


Купить!
Швендимен Б. PHP 4. Руководство разработчика

Эта книга окажется полезной для любого, кто занимается созданием Web-страниц, но главное ее назначение - помочь разработчикам Web-приложений. PHP - это язык программирования, а не средство разработки дизайна, поэтому весьма желательно, чтобы у читателя был некоторый опыт создания программ. Для тех, кто знаком с языками С или Perl, язык PHP покажется довольно знакомым. Он предоставляет в ваше распоряжение множество полезных средств, например, возможность работать с самыми разными базами данных. Книга предназначена для программистов и разработчиков Web-приложений, как начинающих, так и имеющих определенный опыт.


Купить!
Котеров Д.В. Самоучитель PHP4.

Что делать профессионалу, когда он сталкивается с новой технологией программирования? Купить на ближайшем развале книжку "PHP для занятых" - бессмысленная потеря денег, прослушать авторизованный курс - не хватает времени. К счастью, есть выход. Данное учебное пособие по использованию языка РНР версии 4 содержит обширную информацию о приемах, призванных в кратчайшие сроки сделать новичка, владеющего хотя бы одним алгоритмическим языком, Web-программистом. Рассматриваются основы протоколов HTTP и CGI, схемы разработки крупных сценариев на РНР, синтаксис языка и работа с простейшими функциями, объектно-ориентированное программирование на РНР с применением идеологии интерфейсов, манипуляции со строками и массивами, создание баз данных и многое другое. Книга обладает рядом специфических особенностей (характерных только для российских изданий), выгодно отличающих ее от зарубежных аналогов. Для жителей и гостей :-) Москвы автором книги (в учебном центре Артемия Лебедева) может быть прочитан курс "Профессиональное использование PHP".



Купить!
Фролов А., Фролов Г. Практика применения Perl, PHP, Apache, MySQL для активных Web-сайтов. (+CD)

Книги этих авторов давно привлекают внимание профессионалов. В данном случае особенно интересен выход в "Русской редакции" книги о не Microsoft-овских технологиях - PHP и Perl. Книга посвящена созданию активных Web-приложений, предназначенных для работы на платформе операционных систем Linux и Microsoft Windows. Читатель научится создавать как относительно простые Web-узлы для небольших компаний, так и сложные приложения, интегрированные с базами данных и почтовыми серверами. Здесь описаны стенд разработки Web-приложений, особенности установки и настройки Linux, а также популярного Web-сервера Apache, рассмотрены процесс создания программ CGI на языке Perl и сценариев PHP, методики интеграции этих приложений с СУБД MySQL. В основу книги положен опыт, полученный авторами при разработке различных Интернет-проектов, в том числа узла Web службы восстановления данных, узла виртуального кадрового агентства Трудоголик.Ру, созданного специально для этой книги и других проектов. Книга адресована тем, кто уже умеет создавать документы HTML и в целом знаком с принципами работы серверов Web, а также тем, кто желает быстро освоить профессиональные приемы создания активных Web-узлов на платформе Linux и Microsoft Windows. Кроме того, она полезна всем, кому интересно практическое применение современных Интернет-технологий.

Купить!
Ульман Л. Основы программирования на PHP

Книга посвящена РНР, языку написания сценариев, и предназначена для начинающих Web-мастеров, которые планируют создавать динамические сайты. С другой стороны, много интересного в ней найдут и профессиональные дизайнеры, желающие внести элементы динамики в проектируемые ими ресурсы. Книга написана просто и доступно, в ней рассматриваются следующие вопросы: синтаксис языка, строки и управляющие структуры, массивы и регулярные выражения и др. Описываются приемы отладки ваших сценариев, говорится о работе с файловой системой, базами данных, cookie. Особое внимание уделяется получению введеной в форму информации. Дана информация о ресурсах Internet, посвященных описываемых языку.


Разработка Web-приложений на PHP и MySQL. Книга представляет собой всеобъемлющее руководство по совместному применению РНР и MySQL для разработки высокоэффективных и интерактивных Web-сайтов с динамическим содержимым.
Несомненным достоинством книги является её ориентация на решение реальных бизнес-задач, что воплощено во множестве типовых примеров, столь часто встречающихся при повседневной разработке. Среди этих примеров создание покупательской тележки для электронных магазинов, аутентификация пользователей, генерация динамических PDF-документов, разработка систем электронной почты через Web, написание систем поддержки Web-форумов. Помимо пошагового анализа реальных бизнес-примеров, в книге широко рассматривается формальный синтаксис и семантика языка РНР, основы построения приложений баз данных и особенности применения объектно-ориентированной методологии при разработке приложений для Web.
Сопровождающий книгу CD-ROM содержит тексты всех примеров, рассмотренных в книге, а также множество материала, который окажется полезным для каждого разработчика Web-приложений.

Купить!
MySQL. В книге описана одна из самых популярных реляционных систем управления базами данных MySQL. Вместо простого обзора возможностей MySQL, автор показывает, как можно максимально эффективно использовать эту СУБД.
На примере двух тестовых баз данных он приводит решения проблем, с которыми вы обязательно столкнетесь при практическом использовании MySQL. Вы научитесь интегрировать MySQL с программными средствами, разработанными сторонними компаниями, такими как компиляторы языков PHP и Perl, которые позволяют с помощью запросов к базе данных создавать динамические Web-страницы. Кроме того, здесь приведен обширный справочник по типам столбцов, операторам, функциям, синтаксическим конструкциям языка SQL, интерфейсам C API, Perl DBI и PHP API. В книге предоставлена уникальная информация, которую вряд ли можно получить где-нибудь еще. Книга рассчитана на пользователей и разработчиков систем клиент/сервер на основе MySQL.


PHP4: разработка Web-приложений. Библиотека программиста (+CD)

В любой профессиональной деятельности рано или поздно наступает момент, когда книги серии "для чайников" ничего кроме улыбки не вызывают. Но потребность в новых знаниях от этого только возрастает. К сожалению, рынок зачастую не в состоянии предложить достаточное количество книг "для профессионалов". Эта - приятное исключение. В ней вы не найдете примеров из серии "Hello, World!", зато подробно описаны концепции разработки реальных web - приложений и предложены способы реализации этих концепций. Теория построения IRC- клиента, детальное (на самом деле детальное!) описание механизма работы сессий в PHP, введение в PHPLib, вопросы безопасности web - приложений - вот далеко не полный список обсуждаемых вопросов. Прилагаемый к книге CD позволит не только установить PHP на столь любимой россиянами платформе Windows, но и (при желании) предоставит все необходимые дистрибутивы Linux. Оригинал книги (в формате .pdf, на английском языке) и полные листинги всех примеров сильно упростят ее чтение.

Купить!
Будилов В.А. Практические занятия по PHP4. Краткий курс. (+CD)

Эта книга - не из разряда "для занятых". Российский автор, несмотря на "краткость", на примерах рассматривает основы использования языка РНР - одного из наиболее популярных языков программирования, используемого при написании серверных программ-сценариев. Это означает, что РНР-программы способны инициировать запросы, отправлять их по сети Интернет другим программам, называемым серверами, ожидать, получать и обрабатывать ответы, полученные от программ-серверов. С помощью РНР можно легко создавать интерактивные динамические HTML-страницы. Вы научитесь устанавливать и конфигурировать Web-сервер и РНР. Подробно, с примерами рассматриваются все основные элементы языка, основные приемы программирования на РНР версии 4. Приведен краткий справочник функций языка РНР. К книге прилагается CD-диск, на котором собраны примеры программ, рассмотренных в книге, РНР4 для Windows и UNIX, некомпилированный дистрибутив РНР, несколько программ Web-серверов и другие полезные программы. Книга совмещает в себе справочник по РНР, рассчитанный на профессионалов, и материалы для начинающих. Шаг за шагом читатель входит в увлекательный мир РНР-программирования для WEB.



Купить!
Арнольд М. Администрирование Apache

Книга является практическим руководством, посвященным ежедневной работе по администрированию Apache, и предлагает пошаговые инструкции по всем вопросам - от обеспечения безопасности и программирования Web-сервера Apache до создания многодоменных сайтов на одном сервере и объемного справочника по отладке. Книга содержит важную информацию о связанных продуктах, необходимых для создания, запуска и поддержки сервера Apache. Этот уникальный справочник предназначен для всех администраторов Apache.

Купить!
Холден Г. и др. Apache Server в комментариях

Книга Apache Server в комментариях предоставляет уникальную информацию по внутреннему строению одного из наиболее популярных Web-серверов Apache. Книга предназначена, прежде всего, для программистов и разработчиков частей кода и модулей этого замечательного бесплатного сервера, создаваемого истинными фанатами со всего мира. В книге приведены наиболее детальные и емкие комментарии кода ядра и модулей Apache, которые позволяют понять технологию регистрации, доступ к каталогам, запуск CGI-сценариев, генерацию содержания отдельных каталогов и многое другое. Удобная для изучения организация книги позволяет без особого труда разобраться во всех премудростях и хитросплетениях кода, равно как и получить серьезный толчок к созданию и обновлению кода Apache. Сопровождающий книгу CD-ROM существенно упрощает процесс изучения, поскольку содержит все необходимое для того, чтобы стать истинным гуру кода сервера Apache.




при комментировании больших блоков не


h1>Это - пример.>/h1>
Заголовок выше гласит: 'Это - пример'.
Будьте осторожны - при комментировании больших блоков не используйте вложенные комментарии в стиле C.


Вообще-то, ошибка возникнет в предпоследней строке (на последнем */)

Перевод на русский язык © Алексей Мельник, 2001.



Конструкторы


Предупреждение

В PHP 3 и PHP 4 конструкторы ведут себя по-разному. Рекомендуется использовать конструкторы в смысле PHP 4.

Конструкторы - это функции в классе, автоматически вызываемые при создании нового экземпляра класса (то, что мы договорились называть объектами) при помощи оператора new. В PHP 3 функция становилась конструктором, если ее имя совпадало с именем класса . В PHP 4 функция становится конструктором, когда ее имя совпадает с именем класса, в котором она определена - различие весьма тонкое, но критическое (см. ниже).

// Работает как в PHP 3, так и в PHP 4. class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item ("10", 1); } }

Здесь определяется класс Auto_Cart, наследуемый от Cart и конструктор, инициализирующий корзину с одним товаром номер "10" каждый раз, когда новый экземпляр Auto_Cart создается при помощи "new". Конструкторы могут иметь аргументы, эти аргументы могут быть необязательными, что делает их намного более полезными. Чтобы использовать этот класс без параметров, все параметры конструктора должны быть объявлены необязательными через описание значений по умолчанию.

// Работает как в PHP 3 так и в PHP 4. class Constructor_Cart extends Cart { function Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); } }

// Купим то же, что и в старом примере.

$default_cart = new Constructor_Cart;

// Купим реальный товар...

$different_cart = new Constructor_Cart("20", 17);

Предупреждение

В PHP 3 наследуемые классы и конструкторы имели ряд ограничений. Следующие примеры объясняют эти ограничения - читайте внимательно!.

class A { function A() { echo "Я - конструктор A.
\n"; } }

class B extends A { function C() { echo "Я - обычная функция.
\n"; } }

// В PHP 3 здесь конструктор не вызовется. $b = new B;

В смысле PHP 3, в вышеописанном примере, конструктор не вызовется правило PHP 3 гласит: "Конструктор класса A - функция с тем же именем, что и класс". Имя класса - B, функций с именем В нет. Ничего не происходит.


В PHP 4 это преодолено введением другого правила: "Если класс не имеет конструктора, вызывается конструктор базового класса (если он существует)." В вышеописанном примере при исполнени на PHP 4, будет написано: "Я - конструктор A.
".



class A { function A() { echo "Я - конструктор A.
\n"; }

function B() { echo "Я - обычная функция В в классе A.
\n"; echo "Я - не конструктор A.
\n"; } }

class B extends A { function C() { echo "Я - обычная функция.
\n"; } }

// Здесь B() вызывается как конструктор. $b = new B;


В PHP 3 функция B() класса A вдруг становится конструктором в классе В, хотя это никогда не предполагалось. Правило PHP 3 гласит: "Конструктор класса - функция с тем же именем, что и класс". PHP 3 не следит за тем, была ли функция определена в классе В, или унаследована.

В PHP 4 это преодолено следующим изменением правила: "конструктор - это функция с именем, совпадающим с именем класса, в котором она определена". Таким образом, в PHP 4 класс В не будет иметь своего конструктора и будет вызван конструктор базового класса, печатающий "Я - конструктор A.
"

Предупреждение


Ни PHP 3, ни PHP 4 не вызывают конструкторов базовых классов автоматически, из конструкторов наследуемых классов. Обеспечение соответствующих вызовов конструкторов родительских классов возлагается на вас.



Замечание:

В PHP 3 и PHP 4 нет деструкторов. Для имитации большинства действий деструкторов, используйте вместо них register_shutdown_function()

Деструкторы - это функции, автоматически вызываемые либо при разрушении объекта, либо при вызове функции unset(), либо при выходе из области действия. В PHP нет деструкторов.

Перевод на русский язык © Алексей Мельник, 2001.