Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 174; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.009 с.) |