Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Область видимости переменных
Переменные в функциях имеют локальную область видимости. Это означает, что если даже локальная и внешняя переменные имеют одинаковые имена, то изменение локальной переменной никак не повлияет на внешнюю переменную: <? function get_sum () { $var = 5; // локальная переменная echo $var; } $var = 10; // глобальная переменная get_sum (); // выводит 5 (локальная переменная) echo( "<br>$var" ); // выводит 10 (глобальная переменная)?>Локальную переменную можно сделать глобальной, если перед ее именем указать ключевое слово global. Если внешняя переменная объявлена как global, то к ней возможен доступ из любой функции: <?function get_sum () { global $var; $var = 5; // изменяем глобальную переменную echo $var; } $var = 10; echo( "$var<br>" ); // выводит 10 get_sum (); // выводит 5 (глобальная переменная изменена)?>Доступ к глобальным переменным можно получить также через ассоциативный массив $GLOBALS: <? function get_sum () { $GLOBALS["var"] = 20; // изменяем глобальную переменную $var echo( $GLOBALS["var"] ); } $var = 10; echo( "$var<br>" ); // выводит 10 get_sum (); // выводит 20 (глобальная переменная изменена)?>Массив $GLOBALS доступен в области видимости любой функции и содержит все глобальные перемене, которые используются в программе. Время жизни переменной Временем жизни переменной называется интервал выполнения программы, в течение которого она существует. Поскольку локальные переменные имеют своей областью видимости функцию, то время жизни локальной переменной определяется временем выполнения функции, в которой она объявлена. Это означает, что в разных функциях совершенно независимо друг от друга могут использоваться переменные с одинаковыми именами. Локальная переменная при каждом вызове функции инициализируется заново, поэтому функция-счетчик, в приведенном ниже примере всегда будет возвращать значение 1: function counter () { $counter = 0; return ++$counter; }Для того, чтобы локальная переменная сохраняла свое предыдущее значение при новых вызовах функции, ее можно объявить статической при помощи ключевого слова static: function counter () { static $counter = 0; return ++$counter; }Временем жизни статических переменных является время выполнения сценария. Т. е., если пользователь перезагружает страницу, что приводит к новому выполнению сценария, переменная $counter в этом случае инициализируется заново.
Что такое рекурсия Рекурсией называется такая конструкция, при которой функция вызывает саму себя. Различают прямую и косвенную рекурсии. Функция называется прямо рекурсивной, если содержит в своем теле вызов самой себя. Если же функция вызывает другую функцию, которая в свою очередь вызывает первую, то такая функция называется косвенно рекурсивной. Рассмотрим классические примеры использования рекурсии - реализацию операции возведения в степень и вычисление факториала числа. Заметим, что эти примеры являются классическими только из-за их удобства для объяснения понятия рекурсии, однако они не дают выигрыша в программной реализации по сравнению с итерационным способом решения этих задач. <? function degree ( $x,$y ) { if( $y ) { return $x * degree ( $x,$y - 1 ); } return 1; } echo( degree ( 2,4 )); // выводит 16?> Этот пример основан на том, что xy эквивалентно x*x(y-1). В этом коде задача вычисления 24 разбивается на вычисление2*2³. Затем 2*2³ разбивается на 2*2² и так до тех пор, пока показатель не станет равным нулю. Итерационный вариант этого примера выглядит так: <? function degree ( $x,$y ) { for( $result = 1; $y > 0; --$y ) { $result *= $x; } return $result; } echo( degree ( 2,4 )); // выводит 16?>Кроме того, что этот код намного легче понять, он еще и более эффективен, поскольку проход цикла обходится "дешевле" вызова функции. <? function fact ( $x ) { if ( $x < 0 ) return 0; if ( $x == 0 ) return 1; return $x * fact ( $x - 1 ); } echo ( fact ( 3 )); // выводит 6?>Для отрицательного аргумента функция возвращает нулевое значение, так как факториал отрицательного числа не существует по определению. Для нулевого параметра функция возвращает значение 1, поскольку 0! = 1. В иных случаях вызывается та же функция с уменьшенным на 1 значением параметра, после чего результат умножается на текущее значение параметра. Т. е. происходит вычисление произведения: k * (k - 1) * (k - 2) *... * 3 * 2 * 1 * 1Последовательность рекурсивных вызовов прерывается только при вызове fact(0), который и приводит к последнему значению 1 в произведении, так как последнее выражение, из которого вызывается функция, имеет вид 1 * fact(1 - 1). Итерационно факториал можно вычислить так: <? function fact ( $x ) { for ( $result = 1; $x > 1; --$x ) { $result *= $x; } return $result; } echo ( fact ( 6 )); // выводит 720?>
Открытие файлов Файл представляет собой последовательность байтов, хранящуюся на каком-либо физическом носителе информации. Каждый файл имеет абсолютный путь, по которому определяется его местонахождение. В качестве разделителя пути в Windows может использоваться как прямой (/), так и обратный (\) слеш. В других операционных системах используется только прямой слеш. Открытие файлов в файловой системе сервера производится при помощи функции fopen: int fopen(string filename, string mode [, int use_include_path ])Первый аргумент filename - имя файла или абсолютный путь к нему. Если абсолютный путь не указывается, то файл должен находится в текущем каталоге. Второй аргумент mode говорит о том, для каких действий открывается файл и может принимать следующие значения: · r (Открыть файл только для чтения; после открытия указатель файла устанавливается в начало файла); · r+ (Открыть файл для чтения и записи; после открытия указатель файла устанавливается в начало файла); · w (Создать новый пустой файл только для записи; если файл с таким именем уже есть вся информация в нем уничтожается); · w+ (Создать новый пустой файл для чтения записи; если файл с таким именем уже есть вся информация в нем уничтожается); · a (Открыть файл для дозаписи; данные будут записываться в конец файла); · a+ (Открыть файл для дозаписи и чтения данных; данные будут записываться в конец файла); · b (Флаг, указывающий на работу (чтение и запись) с двоичным файлом; указывается только в Windows). Третий необязательный аргумент use_include_path определяет должны ли искаться файлы в каталоге include_path. (Параметр include_path устанавливается в файле php.ini). В случае удачного открытия файла, функция fopen возвращает дескриптор файла, в случае неудачи - false. Дескриптор файла представляет собой указатель на открытый файл, который используется операционной системой для поддержки операций с этим файлом. Возвращенный функцией дескриптор файла необходимо затем указывать во всех функциях, которые в дальнейшем будут работать с этим файлом. Код, приведенный ниже, открывает файл C:/WWW/HTML/file.txt для чтения: <? $file = fopen ( "c:/www/html/file.txt","r" ); if(!file ) { echo( "Ошибка открытия файла" ); }?>Открытие двоичного файла, к примеру, рисунка происходит таким же образом, только с флагом b: <? $file = fopen ( "c:/www/html/river.jpg","rb" ); if(!file ) { echo( "Ошибка открытия файла" ); }?>
Отображение файлов Содержимое открытого файла можно отобразить в браузере с помощью функции fpassthru: int fpassthru (int file )Аргумент file представляет собой дескриптор файла. <? $file = fopen ( "c:/www/html/pavlovo.jpg","rb" ); if(!file ) { echo( "Ошибка открытия файла" ); } else { fpassthru ( $file ); }?>Для текстовых файлов существует еще одна функция отображения readfile: readfile (string filename )Обращаем ваше внимание на то, что в качестве аргумента эта функция принимает имя файла, а не его дескриптор: <? readfile ( "file.txt" );?>Закрытие файлов После того, как вы закончите работу с файлом его необходимо закрыть. Закрытие файлов осуществляется с помощью функции fclose: int fclose (int file )Аргумент file представляет собой дескриптор файла, который необходимо закрыть.
|
||||||
Последнее изменение этой страницы: 2020-11-28; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.2.122 (0.007 с.) |