РНР программирование

 

 Главная          Программа телепередач, энциклопедии и многие другие справочные материалы

 

стр.  1. 2. 3. 4. 5. 6. 7. 8.

Описание файлов библиотеки

Наверх

Библиотека разбита на 7 файлов.

Основные (обязательные) файлы библиотеки:

init.inc.php

поскольку инициализация библиотеки нетривиальна, то для облегчения ее использования создан специальный файл - "init.inc.php", который выполняет все необходимые инициализации и подключает все необходимые файлы; в нем же создается глобальная переменная-экземпляр класса, содержащая правила парсинга (подробней о самом классе - см. файл "settings.inc.php").
В библиотеке существует имя глобальной переменной "по умолчанию" - его можно переопределить в файле "const.inc.php". Все функции-обработчики требуют этот параметр, а в случае, если он не указан, используется имя default-ной глобальной переменной.
Если использовать файл "init.inc.php" без изменений, в нем ВСЕГДА создается default-ная глобальная переменная, которая содержит правила парсинга "по умолчанию". Переопределить эти правила можно в файле "const.inc.php".
Если требуется определить несколько переменных, содержащих различные правила парсинга - лучше всего делать это именно в "init.inc.php".

const.inc.php

в этом файле определены основные константы, используемые "по умолчанию", такие как правила парсинга "по умолчанию", и др., а также подключается файл "misc.inc.php"

main.inc.php

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

  • "parseStr" - обработка строки,
  • "parseFile" - обработка файла, и
  • "parseTag" - обработка тегов специального вида.

settings.inc.php

настройки, используемые при парсинге, например, допустимые символы в имени переменных, допустимые пути к подключаемым файлам, и т.д., вынесены в отдельный класс для увеличения скорости работы библиотеки; этот класс называется "parseRules" и инициализируется при создании значениями "по умолчанию". Обычно это происходит в файле "init.inc.php".
Настройки парсинга, вынесенные в отдельный класс, не только способствуют увеличению скорости работы библиотеки, но также позволяют создавать внутри одного скрипта несколько переменных-экземпляров этого класса с различными правилами парсинга, и использовать их одновременно.

misc.inc.php

все вспомогательные функции собраны в этом файле


Дополнительные (необязательные) файлы библиотеки:

adv.inc.php

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

  • "fileInclude" - возвращает содержимое файла, считанное в строку по заданному имени файла;
  • "makeRepeat" - применяет заданную функцию к каждому элементу заданного массива; результат работы функции поэлементно накапливается и возвращается в виде строки после обработки последнего элемента массива;
  • "makeBool" - в зависимости от заданной переменной возвращает один из двух возможных результатов.

userfunc.inc.php

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

 

 

Функции в PHP

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

function mySum($a,$b)

{

       $result = $a+$b;

        return($result);

};

Использование этой функции:

$result = mySum(2,3);

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

Любая функция в PHP состоит из 4 основных частей:

  • Имени функции. Каждая функция должна иметь свое уникальное имя, в противном случае PHP выдаст ошибку о попытке переопределения функции.
  • Списка аргуметов. Этот список может быть пустым (если функция не должна получать агрументов из внешней программы). Каждый аргумент должен иметь уникальное имя, под которым он будет "известен" внутри функции. В приведенном выше примере функция имеет два аргумента с именами $a и $b.
  • Непосредственно кода функции. Функция можеи содержать внутри себя практически любой код, допустимый в PHP за исключением определения других функций и объектов (это, кстати, отличает PHP например от JavaScript, где вложенное определение функций допустимо). В нашем случае код функции занимается вычислением значения двух переданных аргументов.
  • Возвращаемого значения. Функция не обязана возвращать значение, но если сделать это необходимо, то это делается с помощью оператора return().

Для иллюстрации дальнейшего материала предлагаю использовать следующую задачу:

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

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

  1. Возврат нескольких значений в виде массива.

// Функция достает следующее значение из глобального массива $data и возвращает его

// Возвращает null, если в массиве не осталось ни одного значения.

function getNext($counter)

{

        global $data;

        if (isset($data[$counter]))

                {

                        $result = array();

                        $result['data'] = $data[$counter];

                        $counter = $counter+1;

                        $result['counter'] = $counter;

                        return($result);

                }

        else

                return(null);

};

// Использование этой функции

$counter = 0;                       // Эта переменная будет использоваться в качестве "указателя"

                                    // на текущий элемент в массиве.

while($next = getNext($counter))    // Получаем следующее значение

{

        $value = $next['data'];      // Значение из массива

        $counter = $next['counter'];   // Новое значение указателя

// Здесь мы каким-то образом используем полученные данные

};

Кстати, не могу удержаться, чтобы не продемонстрировать, как можно записать то же самое по-другому:

function getNext($counter)

{      

        return((isset($GLOBALS['data'][$counter]))?

                                array('data'=>$GLOBALS['data'][$counter++],'counter'=>$counter):

                                null);

};

Как видите - намного компактнее, хотя с первого взгляда и менее понятно.

  1. Использование глобальных переменных.

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

function getNext()

{      

        global $data, $counter;

        if (isset($data[$counter]))

                return($data[$counter++]);

        else

                return(null);

};

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

  1. Использование ссылок.

В PHP4 появилась возможность работать со ссылками (references). Это очень мощный механизм, о котором мы поговорим подробнее немного позже. Если вы знакомы с C/C++, то для вас references не будут чем-то новым - это аналог указателей в C. Если же нет, то вкратце объясню, что references позволяют нескольким разным переменным ссылаться на одно и то же значение. Может быть кому-то проще будет представить это как одну переменную с несколькими именами. Признаком использования references является наличие знака & перед именем переменной. А теперь посмотрим, как решить нашу задачу с использованием references.

function getNext(&$counter)

{      

        global $data;

        if (isset($data[$counter]))

                return($data[$counter++]);

        else

                return(null);

};

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

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

  1. Использование статических переменных.

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

function getNext()

{

        global $data;

        static $counter=0;

        if (isset($data[$counter]))

                return($data[$counter++]);

        else

                return(null);

};

// Использование этой функции

while($value = getNext())

{

// Здесь мы каким-то образом используем полученные данные

};

Как видите, в нашем случае использование статической переменной здорово упростило код.

Ну и еще пара вариантов решения нашей задачи:

Вариант 1:

foreach($data as $value)

{

// Здесь мы каким-то образом используем полученные данные

};

Вариант 2:

reset($data);

while(list($key,$value) = each($data))

{

// Здесь мы каким-то образом используем полученные данные

};

 

 

1. Что такое PHP?

1. 1. Применение РНР при программировании сайтов

1.2. Программа регистрации и авторизации на вашем сайте

1.3. Программа регистрации и авторизации на сайте с шифрованием пароля

2. Глава посвящена программированию
вообще и программированию в частности
сайтов

3. MySQL элементы управления и взаимодействие с PHP

4. Русский перевод файла "httpd.conf" Для Apache 2.0

5. Русский перевод файла "php.ini"

 

главная                                                                                                                   стр.  1. 2. 3. 4. 5. 6. 7. 8.