Развитие языков программирования растёт с большой скоростью
Скачать 2.79 Mb.
|
Функция Действие Sqrt Находит квадратный корень. Rand Генерирует случайное число. Pow Возводит в степень. Pi Число Пи. Max Возвращает наибольшее значение. Min Возвращает наименьшее значение. - Табл. 7 - Некоторые функции для работы с числами в РНР Я хотел также вставить в этот список тригонометрические функции, но все таки решил что лучше не вставлять поскольку читатель который не очень хорошо понимает математику может не очень хорошо понять что вообще происходит при использовании данных функций. Функция sqrt Функция просто находит квадратный корень заданного числа: ?> Функция rand Эта функция есть во многих языках программирования. Мы задаем от которого числа начинать считать и на котором остановить отсчёт: PHP: Junior Kit 61 ?> Функция pow Функция имеет два аргумента первый это степень в которую мы хотим возвести число, и второй аргумент это число который мы хотим возвести в заданную нами степень: ?> Функция pi Функция не делает ничего супер уникально просто выводит число пи которое очень большое: ?> Функция max В функцию мы вводим числа или можем вводить также строки, и в результате функция возвратить нам какой элемент имеет большое числовое значение чем другие: ?> Функция min Работает также как и max только наоборот: ?> PHP: Junior Kit 62 Это не все функции которые предназначены для работы с числами, если хотите увидеть больше то тогда обращайтесь в официальную документацию по числовым функциям. Эти функции я показал как пример, для того чтобы вы могли потом с ними поработать чтобы лучше усвоить материал. 6.4 Функции для работы с массивами Ну и на последок об встроенных функциях для работы с типами данных я расскажу вам об функциях для работы с массивами. Посмотрите на таблицу 8: Функция Действие Array Создает массив. in_array Проверяет есть ли в массиве заданный элемент. array_sum Вычисляет сколько элементов есть в массиве. array_unique Удаляет повторные элементы в массиве. array_values Извлекает все элементы массива. array_rand Выбирает случайный элемент в массиве. array_pop Извлекает последний элмент массива. - Табл. 8 - Некоторые функции для работы с массивами в РНР PHP: Junior Kit 63 Функция array Функция используется для создания массива и его указания его элементов: $groups = array ( "Kraftwerk", "The prodigy", "Eisenfunk" ); //Можно также создавать массивы с ключами: $team = array( "Mike" => "Teamlead”, "Jack" => "Developer", "Lorens" => "Engineer" ); ?> Функция in_array Используется чтобы проверить есть ли заданный нами элемент в заданном нами массиве. Функция имеет три параметра которые мы можем указать. Первый это элемент/значение которое мы ищем в массиве, второй это массив в котором мы будем искать заданный нами элемент и третий аргумент это режим со строгой проверкой: $group = ["Front-end", "Back-end", 134]; if (in_array(134, $group)) { echo "Поиск без строгой проверки"; } if (in_array("134", $group, true)) { echo "‘134’ найдено со строгой проверкой"; } PHP: Junior Kit 64 ?> Функция array_sum Суммирует все элементы массива в один: $values = [3, 5, 7, 8]; echo $array_sum($values); // Результат: 24 ?> Функция array_unique Удаляет повторяющиеся элементы в массиве: $app = ["Code", "Plan", "Team", "Code"]; $new_app = array_unique($app); echo $new_app; ?> Функция array_values Извлекает все элементы массива: $array = ["Paperoni", "Cheese", "Tomatoes"]; echo array_values($array); ?> Функция array_rand Выбирает случайный элемент массива: $a = [2, 3, 5, 7, 9]; echo array_round($a); ?> PHP: Junior Kit 65 Функция array_pop Извлекает последний элемент массива: $val = [1, 2, 3]; echo array_pop($val); ?> На этом я завершаю разговор об встроенных функциях в РНР, хотя мы ещё с встретимся в будущих главах с многими функциями которые к примеры предназначены для работы с базой данных. А сейчас же мы поговорим об так званых анонимных функциях. 6.5 Анонимные функции Анонимные функции - известны также как функции которое без названия. К примеру мы можем присвоить какой то переменной значение функции: $my_func = function($word) { echo $word; } $my_func($word); ?> Заключение Об функциях ещё много чего можно сказать, я дал вам основные знания об этом. С помощью функций нам не приходиться изобретать велосипед снова и снова. Следующий раздел будет посвящен Объектно- Ориентированному-Программированию – принцип, который намного делает легче разработку и не надо изобретать велосипеды. PHP: Junior Kit 66 Когда мы будем изучать классы, то мы познакомимся с публичными, приватными и защищенными функциями. Но об этом немного позже а сейчас же попрошу читателя ответить на вопросы для самоконтроля и выполнить упражнения которые внизу чтобы лучше закрепить материал. Вопросы и упражнения для самоконтроля 1. Что такое функция и как её определить? 2. Как можно использовать локальные переменные? 3. Назовите хотя бы 3 функции которые предназначены для работы со строками. 4. Назовите хотя бы 3 функции для работы с числами. 5. Создайте функцию в которую мы бы задавали три числа A, B и C. Сначала функция должна умножить A на B а потом добавить C и найти квадратный корень всего этого. PHP: Junior Kit 67 7 PHP и ООП В этом разделе мы будем изучать материал, который не всегда можно понять с первого раза, поэтому будьте внимательными. ООП - это аббревиатура, которая расшифровывается как Объектно- Ориентированное-Программирование. В ООП все строиться на классах, методах и объектах. Класс - это как бы сказать шаблон, который мы создаем, чтобы потом с этого шаблона сделать объект. Классы имеют свои функции и методы которым мы можем объявлять область видимости, но об всем этом немного позже. Если вы не очень поняли что значит класс то представьте что классы это формочки для выпекания печенья, а цвет печенья, тесто с которого оно сделано и т.д. - это уже функции класса. Вот так можно себе научно-популярно представить, что это такое. ООП основано на: полиморфизме, инкапсуляции и наследовании. Давайте я объясню все эти понятия. Полиморфизм - это концепция где общий интерфейс обрабатывает разные типы данных. Инкапсуляция - это концепция объединяющая данные и код и обрабатывая их как одно целое. PHP: Junior Kit 68 Наследование - это когда дочерний класс наследует методы от родительского класса. Или если вы не очень хорошо поняли, то наследование это когда какой-то класс берет методы от другого класса. Класс который взял методы это дочерний класс а класс в которого взяли методы родительский класс. Этих понятий вам хватить для начала, а теперь поговорим об создании классов. 7.1 Классы Классы объявляются с помощью аргумента class и после чего мы вводим название класса и наконец раскрываем фигурные скобки и начинаем писать код внутри класса. Хочу заметить что класс это не просто шаблон который мы создаем, это даже отдельный класс данных. Пример создания: } ?> После создания класса мы можем создать объект на шаблоне этого класса с помощью директива new: $group1 = new Group(); ?> Помните об общих правилах создания названия, никаких цифр сначала и символов на русском алфавите. В классе мы можем указывать свои функции, они могут иметь глобальную область видимости и локальную: PHP: Junior Kit 69 … // Эту функцию можно будет вызвать за пределами класса } private function Delete() { … // Эта функция не будет доступна за пределами класса } protected function Update() { … // А эта функция будет доступна только классу } } ?> В эти функции можно будет указать свой код и также локальные переменные, а чтобы вызвать функцию класса надо будет указать имя класса, поставить :: и указать название функции с локальными переменными если они конечно есть: Groups::Create(); ?> В классе могут быть свои переменные которым мы устанавливаем область видимости и также можем задать значение которое будет по умолчанию: } ?> PHP: Junior Kit 70 К переменным которые внутри класса можно обращаться в такой способ: $group1_name = Group::name; $group = new Group(); $test = $group->name; ?> Внутри функции обращение к какой-то переменной класса осуществляется через супер-переменную $this: … public Create($value) { $this->name = $value; return $value; } } ?> Ну а теперь когда вы поняли как работают переменные в функциях класса и вообще в классе то можно поговорить об константах. Константы - это почти тоже самое что и переменные только они не объявляются знаком доллара и всегда имеют постоянное значение. Константы не должны быть свойством или вызовом функции. Объявляются они с помощью директива const. К примеру: } PHP: Junior Kit 71 ?> Теперь вы имеете чёткое представление об классах и функциях которые внутри их. А теперь поговорим об конструкторах и деструкторах. 7.2 Конструкторы и Деструкторы Конструкторы это такие функции которые мы создаем внутри класса и они вызываются только один раз при создании нового объекта этого класса. Конструкторы и деструкторы могут иметь свои локальные переменные так как и простые функции. Конструктор создается создавая функцию и давая ей имя __construct: } } ?> Заметьте что при создании конструкции не указывается область видимости. Если вы теперь создадите новый объект то вы получаете надпись default: $album1 = new Album(); ?> Мы выяснили что такое конструктор, но что такое деструктор? Деструктор это также функция, вызывается она тогда когда освобождаются все переменные или завершение скрипта: … function __destruct() { PHP: Junior Kit 72 echo “Скрипт завершен”; } } ?> Конструкторы и деструкторы хорошо использовать если к примеру в начале надо сделать проверку значений или удалить не нужные данные после окончания работы скрипта. Теперь поговорим об наследовании и что это такое. Как я уже говорил наследование это когда дочерний класс принимает функции от родительского класса, реализовать это можно с помощью аргумента extends: } ?> Как вы видите то класс альбом принял функции от класса Group который находиться в отдельном файле в том же месте где и находиться файл с классом Album и подключили мы этих два файла с помощью функции include. Теперь мы сможем использовать функции класса Group с помощью класса Album: … Album::Create(); $new_obj = new Album(); ?> Но важно что дочерный класс не сможет принять классы с защищенной(protected) областью видимости. Это ещё одна способность языка РНР с которой нам не придется изобретать велосипед. PHP: Junior Kit 73 7.3 Абстрактные классы Перед тем как я расскажу вам об абстрактных данных, я для начала расскажу об том что такое абстракция в общем. Представьте себе компьютер, вы чётко знаете что это компьютер а не материнская плата, видеокарты, процессор, микроконтроллеры вместе с транзисторами и т.д. и т.п. То есть абстракция это понимание какой то группы объектов как единое целое. Ну а теперь вернемся к абстрактным классам, если класс содержит хотя бы одну абстрактную функцию то мы должны определить данный класс как абстрактный. Абстрактные классы как раз и реализующих один из принципов ООП в РНР - полиморфизм. Как было сказано, полиморфизм - это концепция где есть общий интерфейс для обработки разных типов данных и т.д. То есть обработка данных как одно целое: // Публичная функция } } ?> Чтобы сделать статическую функцию надо использовать аргумент static. Аргумент static создает статическую переменную. К статическим переменным можно обращаться без создания экземпляра класса, к примеру: PHP: Junior Kit 74 public function PubFunc() { return self::$some; } } class MyClass2 extends MyClass { public function ParFunc() { return parent::$some; } } MyClass::$some; ?> Надеюсь вы заметили что мы в первом классе в функции указываем чтобы функция возвращала от себя статический метод. Ну а теперь посмотрим на пример с статической функцией: … } } MyClass::MyFunc(); ?> Теперь когда вы поняли как можно реализовать абстракцию данных в классах, можно поговорить об интерфейсах. 7.4 Интерфейсы Интерфейсом можно описать функции которые должны быть в классе, только мы не описываем их работу. Функции которые создаются в интерфейсе должны быть публичными, а также внутри функций ничего PHP: Junior Kit 75 не должно быть. Интерфейс объявляется с помощью аргумента interface: } ?> После создания интерфейса его можно реализовать в классе с помощью использования аргумента implements: … } function update() { … } … } ?> То есть это также что то типо шаблонов. Ну а теперь поговорим об том что такое перегрузка и магические методы. 7.5 Перегрузка и магические методы С помощью перегрузки можно динамическим способом создавать функции которые обрабатываются магическими методами, которые создаются в классе. Чтобы перегрузить свойства(локальные переменные) надо использовать функции __get и __set. Это сработает тогда когда PHP: Junior Kit 76 объект к которому мы обращаемся не содержит свойства к которым можно осуществить доступ: ?> Вот пример использования: } public function __get($name) { echo “Значение не равно value”; } } $obj = new Group; echo $obj->a; // Свойства не существует и мы получим сообщение которое было задана в функции echo $obj->b = 3; // Свойства не существует echo $obj->since; // Свойство существует ?> Ну а теперь в общем поговорим об том как перегрузить функции, это делается с использованием метода __call. Это сработает тогда если в классе нету функций которым можно осуществить доступ: { PHP: Junior Kit 77 return “Задданая вами функция не существует $name”; } public function Create() { } } $obj = new Album; $obj->Create(); // Функция существует $obj->Get(); // Функция не существует ?> Мы рассмотрели перегрузку а теперь посмотрим на магические методы. Первым магическим методом будет метод __toString(), метод будет срабатывать тогда когда мы попытаемся превратить класс в строку: } } $obj = new MyClass; echo $obj; // Результат:Это будет строка класса ?> Следующий магический метод это __invoke(). Метод будет вызываться тогда когда объект будут пытаться вызвать как функцию: PHP: Junior Kit 78 return $value; } } $obj = new MyClass; echo $obj("Hello World"); ?> Напоследок это все что я хотел сказать об перегрузке и магических методов. Дальше мы рассмотрим трейты, после этого завершается этот раздел который был посвящен ООП. 7.6 Трейты Трейты немного похожие на классы но используются они для того чтобы структурирована группировать функционал. Сам по себе трейт не сможет существовать, это один из элементов наследования, это использования функционала класса без необходимости: } } ?> После этого можно немного отдохнуть и попрактиковаться с материалом который был представлен в этом подразделе. Заключение После всех этих сложных тем которые для новичка очень тяжело запомнить можно спокойно расслабиться и попрактиковаться с ООП. Перед нами ещё долгий и сложный путь по базах данных, сессиях, безопасности и т.д. Как и в каждом конце главе я прошу читателя PHP: Junior Kit 79 ответить на вопросы и выполнить вопросы для самоконтроля которые внизу. Вопросы и упражнения для самоконтроля 1. Что такое ООП? На чем оно основано? 2. Объясните что такое: полиморфизм, наследование и инкапсуляция. 3. Что такое класс? Как его можно создать? 4. Как можно реализовать наследование? 5. Напишите программу с использованием класса которая использовался для того чтобы создавать группу. В классе должны быть такие параметры как: название группы, год основания, краткое описание и основатель. PHP: Junior Kit 80 8 Дата и Файлы Через язык программирования PHP можно работать с файловой системой вашего приложения. Например, с помощью РНР можно создавать разные файлы/директории. И это ещё не все функции которые мы с вами можем делать с файловой с помощью языка программирования РНР. Файлы можно редактировать прямо с приложения, или читать их содержимое. В общем РНР функции для работы с файловой системой позволяют реализовать полноценную работу с файлами. Работа с файлами через РНР делиться на 3 стадии, это: 1. Открытие файла(если он существует) 2. Работа с файлом. Например, манипуляция содержимым файла. 3. Закрытие файла и завершение работы с ним. Именно по таким 3 стадиям мы и будем работать с файловой системой. Безопасность файловой системы в этом разделе рассматриваться не будет, об этом речь пойдет в разделе об безопасности. 8.1 Работа с файлами Первая стадия работы с файлами как уже упоминалось это открытие самого файла если он существует. В РНР есть функция fopen() для того чтобы открывать файлы. Функция имеет 3 параметра, два из которых являются не обязательным и один обязательный. Первый параметр это файл который мы хотим открыть, а второй параметр это режим через который мы будем работать с файлом: PHP: Junior Kit 81 $opening = fopen("openit.txt", "r"); ?> Теперь надо задаться вопросом что это за режим для работы с файлами я поставил? Режим работы с файлами r предназначен для того чтобы открыть файл только для чтения. Внизу я сделал таблицу, в которой показаны все режимы для работы с файлами. Эти режимы можно использовать в любой функции для работы с файловой системой, если в функции есть параметр с помощью которого можно задать режим работы с файлом. Режим работы Действие r Открыть файл только для чтения. r+ Открыть файл для чтения и записи. w Создание нового файла. Если будет вызвано на существующий файл то файл будет удален. w+ Создание нового файла. Если будет вызван существующий файл содержимое файла будет удалено. a Открытие существующего файла в режимы записи. a+ Открытие существующего файла в режиме записи и чтения. - Табл. 9 - Режимы для работы с файлами в РНР PHP: Junior Kit 82 Надеюсь вы прочитали таблицу и поняли что за что отвечает, а теперь я покажу несколько примеров: $files = fopen("counter.txt", "rt"); // Текстовый режим чтения указаного файла $files2 = fopen("http:://google.com", "r"); // Открытие HTTP соединения для чтения страницы ?> Об работе HTTP в РНР мы ещё поговорим, а сейчас мы должны подкрепить ещё много информации для того чтобы двигаться дальше. Окей, мы знаем как делать первую стадию для работы с файлами в РНР а как насчёт второй стадии с помощью которой мы взаимодействием с данными файла? Сделать это можно с помощью функции fwrite(), эта функция имеет 3 параметра, первый и второй обязательный, а третий по требованию: $files = fopen("counter.txt", "a"); $text = "Эта строка будет записана в файл"; $record = fwrite($files, $text); ?> Из этого можно сказать что первом параметре функции мы указываем имя файла в который хотим внести изменения, а второй аргумент это уже строка которую мы хотим внести в файл. А третий параметр мы вносим если нам надо, он отвечает за длину строки которую мы хотим внести в файл. Если мы хотим вывести весь файл по строкам то в этом случае нам надо использовать функцию fgets(): $myfile = fopen(“count.txt”, “r”); if ($myfile) { while (!feof($myfile)) { PHP: Junior Kit 83 $text = fgets($myfile, 999); echo $text; } } else { exit (‘Error with file’); } ?> Функция имеет два параметра которые мы должны обязательно указать. Первый это название файла к которому мы хотим обратиться и второй это сколько строк мы хотим взять с файла. Посмотрите на условие в цикле которое мы создали, здесь мы использовали функцию feof которая проверяет наступил ли конец файла. В нашем мы поставили оператор ! которая является логическим не, то есть работу нашего с вами цикла можно описать так, пока не наступил конец файла то не переставать выводить строки. Ну в конечном результате мы закрываем наш файл с помощью функции fclose(): $myfile = fopen(“count.txt”, “r”); fclose($myfile); ?> В следующем под-разделе мы посмотрим какие есть функции для работы с файлами, я выведу лишь некоторые функции. 8.2 Смена прав доступа Смена прав доступа к файлу это нужная вещь. К примеру если вы будете создавать приложение где есть группы пользователей и надо будет кто именно может иметь доступ к определенному файлу. Сменить права доступа можно с помощью функции chmod(). Функция имеет два параметра которые надо указать это filename - то есть название файла к которому мы будем обращаться, и PHP: Junior Kit 84 параметр mode в котором мы и указываем какие права доступа мы хотим поставить на файл с помощью 8-ми разрядных чисел. В разделе об числах я вам уже говорил об числах с разными разрядами. 8-ми разрядные числа это набор цифр в котором есть только 8 символов: 0,1, 2...7. Цифра 8 не указывается в 8-ми разрядной системе счисления. В 8-разрядной системе счисления счёт как и в десятичной системе счисления начинается от единицы и идет дальше. Но когда будет цифра 7 то после её не будет 8 а будет 10. А потом если будет 17 т снова таки не будет 18 а будет 20. После того как мы выяснили как именно работает 8-ми разрядная система счисления можно поговорить об том как именно можно задавать права доступа. Параметр mode имеет три 8-ми разрядные числа с помощью которых мы можем задать права доступа для файла. Есть 3 цифры которыми задаются права, но если суммировать эти числа то можно создавать разные типа прав доступа. Вот 3 цифры и их значения: 1 - доступ на выполнение; 2 - доступ для записи; 4 - доступ на чтение; Чтобы лучше понять как именно это работает посмотрите на пример который показан внизу: 0600); // В этом примере владелец файла имеет права для записи и чтения, другие не имеют доступа к файлу ?> Из только что показанного примера можно вытянуть себе такую схему которая объясняет какой именно разряд чисел имеет отвественость: PHP: Junior Kit 85 - Рис. 5 - Схема объясняющая то как устроены права доступа в РНР Где нули там нету вообще никаких прав доступа. Владелец в нашем примере имеет почти полные права для доступа. Это чётко понятно из значения старшего разряда. Что ж я надеюсь что вы хотя бы немного поняли как именно это работает. Теперь рассмотрим ещё несколько примеров: ?> Как я уже и говорил смена прав доступа это важная вещь. Вот что можно сказать в заключение данного под раздела. PHP: Junior Kit 86 8.3 Проверка файлов Затроним тему об безопасности файлов, в данном подразделе мы рассмотрим функции и способы которыми можно делать проверку файлов. К примеру проверку файлов на формат, размер и т.д. Первой функцией с которой мы познакомимся это is_dir() которая проверяет является указанное нами имя файла директорией. Функция is_dir Функция имеет только один параметр это filename и данные функция возвращает в двух логических значениях истины и ложи. Пример: ?> Поскольку простые команды для вывода данных не способны отобразить логическое значение то мы использовали в этом примере функцию var_dump() которая используется для того чтобы отобразить полные данные об переменной или об других значениях. Чтобы понять в каких целях можно использовать данную функцию вот пример: $direct = "default"; if (is_dir($direct) { echo "Данные проверены, продолжаем работу"; } else { echo "Простите но это не файл."; } ?> PHP: Junior Kit 87 Из только что показанного примера можно понять что с помощью данной функции можно реализовать полноценную проверку данных, этот вопрос безопасности очень важен. А теперь посмотрим на функцию is_file() которая определяет является ли заданный объект файлом. Функция is_file() Как и функция is_dir() имеет только один параметр, т.е. название файла который мы хотим проверить. И также эта функция возвращает данные в виде логических двоих логических значений. Пример: ?> Думаю что делать дополнительного примера для этой функции уже не надо. Вы уже познали две такие функции который используются для проверки в файловой системе. Двигаемся дальше, следующей функцией будет is_readable() проверяющая существование файла и доступен ли он для чтения. Функция is_readable() Какие и две предыдущие функции имеет один параметр и выводит данные в виде двоих логических значений: ?> PHP: Junior Kit 88 Функция is_writable() Функция имеет один параметр и работает также как и предыдущие функции. Вообще функция проверяет доступен ли файл для записи: Значение зависит от прав доступа к файлу ?> Функция file_exists() Функция имеет один параметр и возвращает данные в виде двоих логических значений истине и ложи. Функция проверяет существует ли файл или нет: ?> На этом я хочу закончить данный подраздел, но об безопасности с файлами мы ещё поговорим. А также в отдельном подразделе рассмотрим некоторые функции для работы с файлами. 8.4 Функции для работы с файлами Как и для каждого типа данных, для работы с файлами также есть свои функции с помощью которых вы можете манипулировать файлами и данными которые содержат эти файлы. Вы уже познакомились с несколькими такими функциями, но если вы захотите сделать какие то более совершенные вещи с файлами, то вам конечно же понадобиться больше функций который расширят круг возможностей для работы с файлами. В таблице 10 приведены некоторые функции для работы с файлами: PHP: Junior Kit 89 Функция Действие Copy Копирует файл. pathinfo Возвращает данные пути к файлу. Mkdir Создаёт директорию. Rmdir Удаляет директорию. Stat Возвращает информацию об файле. filetype Возвращает тип файла. fileowner Возвращает данные о владельце файла. fileperms Возвращает данные о правах доступа. filegroup Возвращает данные о группе файла. filesize Возвращает данные о размере файла. - Табл. 10 - Некоторые функции для работы с файлами в РНР Конечно здесь вы можете не найти функций описание которых отвечает той функции, которую вы хотите найти. В таком случае воспользуйтесь документацией функций по работе с файлами. Хорошо, вы увидели довольно таки небольшой список функций которые предназначены для работы с файлами. Здесь я указал функции которые как я считаю, могут вам понадобиться в разработке. Поэтому давайте быстро пройдемся по каждой функции которая указана в таблице. Функция copy() Как было сказано функция может копировать файлы. Имеет 3 параметра, 2 обязательных и 3-ий не обязательный. Параметры: filename - файл который мы хотим скопировать и путь к этому PHP: Junior Kit 90 файлу, dest - имя файла который мы скопируем, а также путь к этому файлу. Пример использования функции: ?> Функция pathinfo() Функция имеет два параметра, path - путь к файлу который мы хотим проанализировать и options - массив в котором есть много элементов с помощью которых можно получить много информации о нахождении файла. Массив имеет такие элементы: dir - путь к папке, внутри которой находиться файл. basename - полное имя файла. extension - формат файла. filename - название файла. Массив работает по принципу ключ-значение. Пример: "; print_r(pathinfo("user/challenge.txt")); echo " "; ?> Результат: Array ( [dirname] => user/ [basename] => challenge.txt [extension] => txt [filename] => challenge ) PHP: Junior Kit 91 Используя функцию print_r которая предназначена для того чтобы вывести данные об переменной или других объектах мы смогли увидеть что данные мы получили в виде массива. Заметьте, что здесь с помощью команды echo я открыл тег чтобы вывод результата был красивым и легким для чтения. Функция mkdir() Как было указано в таблице, то эта функция используется для того чтобы создавать директорию. Функция имеет целых 4 параметра: pathname - путь к директории. mode - режим прав доступа. recursive - разрешает создавать вложенные директории, которые указаны в первом параметре. context - описание контекста. Мы рассмотрим только два параметра. Пример создания директории с помощью этой функции: ?> Поскольку вы уже знакомы с такой функцией как chmod() то вы уже знаете как можно задавать права доступа. В нашем примере сначала мы просто создали директорию не указывая прав доступа, а уже потом создали директорию с полными правами доступа только для владельца файла. Функция rmdir() Функция имеет только два параметра: dirname и context. Как было сказано в таблице, то данная функция удаляет директорию: PHP: Junior Kit 92 ?> Можно также использовать аналог этой функции - unlink(). Функция stat() Функция имеет только один параметр это название файла. Но при этом данные об файле возвращаются в виде массива, который имеет 12 элементов, массив работает по принципу ключ-значение. Пример вызова функции: "; print_r(stat("main/hello.jpg")); echo " "; ?> Хорошо, а теперь поговорим о том какие именно есть элементы массива и за какие функции они отвечают. Внизу приведена таблица, в которой показываются все элементы массива, с помощью которых можно получить разную информацию: Элемент Значение Dev Имя устройства. Ino Номер inode. Mode Режим защиты inode. Nlink Количество сыллок. Uid Идентификатор владельца. Gid Идентификатор группы. Rdev Тип устройства, если устройств inode. PHP: Junior Kit 93 Size Размер файла в байтах. Atime Время последнего обращения к файлу. Mtime Время последней модификации файла. Ctime Время последнего изменения inode. blksize Размер блока ввода-вывода файловой системы. Blocks Количество используемых 512-байтовых блоков. - Табл. 11 - Элементы массива функции stat() в РНР Мы не будем рассматривать каждый элемент, особенно мы не нуждаемся в том чтобы рассмотреть последних два элемента. Чтобы вывести какую-нибудь информацию об каком то заданном файле используя эту функцию, то мы должны задать один из ключей который показан в табл. 11. Например: $info_file = stat("info.doc"); echo $info_file["mtime"]; // В результате получим время модификации файла ?> Данную функцию хорошо использовать тогда когда мы хотим достать какие то дополнительные данные об файле кроме его названия. Функция filetype() Функция имеет только один параметр, это имя файла или путь к нему. Как было уже сказано, то эта функция проверяет тип файла, т. е. это типичная функция для проверки файлов. Значения будут возвращаться в виде названия типа файла, но главное это не путать с форматом файла: PHP: Junior Kit 94 ?> Функция fileowner() Имеет только один параметр - filename. Функция находит идентификатор владельца файла. Чтобы бы не было ошибки используйте функцию posix_getpwuid() чтобы получить имя владельца в виде строки: )); ?> На этой ноте я хочу завершить написание этого подраздела об функциях для работы с файлами. Да, у нас ещё осталось несколько функций, которые мы можем рассмотреть, но их работа и вообще сами они очень просты. Поэтому я завершу этот подраздел и будем уже рассматривать работу с датой. 8.5 Дата Представьте что вам придется создать приложение в котором будут записи и когда пользователь будет создавать новую запись должна будет записываться дата создания записи. Чтобы это реализовать в РНР PHP: Junior Kit 95 есть отдельный класс и функции для этого. То есть класс для реализации даты и функции для работы с датой. Самой простой функцией для вывода времени является функция time() , если мы вызовем эту функцию то получим значение в секундах после появления UNIX эпохи. Окей, хорошо мы только что увидели просто функцию для развлечения, но должна существовать функция которая могла бы быть полезной для нас во время разработки. И да, такая функция есть. Функцией этой является getdate() которая вычитывает информацию о времени и дате. Внутри функции есть массив в котором как раз и содержится информация о дате и времени которую мы можем увидеть. Массив работает по принципу ключ- значение, внизу показаны названия ключей и значения которые они могут принимать: Ключ Описание seconds Секунды(от 0 до 59) minutes Минуты(от 0 до 59) hours Часы(от 0 до 23) mday День месяца(от 1 до 31) wday День недели (от 1 до 6) mon Номер месяца(от 1 до 12) year Год yday День года (от 0 до 365) weekday Название дня недели(от Sunday до Saturday) PHP: Junior Kit 96 month Название месяца (от January до December) 0 Количество секунд прошедших после создания эпохи UNIX. - Табл. 12 - Элементы массива функции time() Ну и вот мы наконец-то нашли функцию которая может нам быть полезна в разработке, к примеру, дата создания пользователем записи. Пример использования: $day = getdate(); print_r($day); ?> Чтобы не было ошибки вывода данных, мы использовали функцию print_r которая используется для того чтобы выводить информацию об переменной в удобочитаемом виде. Я говорю об ошибке которая появилась бы если бы мы попробовали вывести данные даты с помощью простой команды echo. Проблема заключается в том что если мы пробуем вывести данные через echo то мы сразу получим ошибку - а все через то что мы пытаемся передать команде целый отдельный объект даты, который даже не конвертирован в строку. И именно через это мы получаем ошибку. Как выводит данные объекта даты, мы об этом поговорим позже. Давайте вернемся к нашему примеру. В результате вы должны увидеть названия ключей и их значения. Хорошо, ну а что же дальше? Может ещё есть функции которые позволяют нам работать с датой? Конечно что да! Их очень много также как и других функций, которые предназначены для работы с определенным типом данных. И одной из таких функций является функция date() которая форматирует вывод системной даты, то есть мы сами задаем дату и время которое нам надо, и при этом мы можем конвертировать данные так чтобы не PHP: Junior Kit 97 получать ошибку, при выводе с помощью команды echo или любой другой команды для вывода текстовых данных. Функция имеет два обязательных параметра. Первый это шаблон, по которому мы хотим отформатировать дату и второй это есть метка времени в которой может быть задано нами время или системное время. Пример использования функции: ?> Окей, и что мы только что создали? Как мы видим, то мы указали только первый параметр. Если вы запустите этот код в браузере то удите текущий год, номер месяца и день месяца. Ну и как мы видим то данная функция также является очень полезной, поскольку мы можем нормально выводить данные даты и времени через echo. Данная функция имеет массив в котором содержится вся информация о дате и времени в ключах. В таблице 13 показаны почти все ключи которые есть внутри массива: Ключ Описание D День месяца с ведущим нулем(от 01 до 31) D Название дня недели 3-мя символами(от Mon до Sun) J День месяца без ведущего нуля(от 1 до 31) L Полное название недели(от Sunday до Saturday) N Порядковый день недели в соответствии со PHP: Junior Kit 98 стандартом ISO-8601 (от 1 до 7) S Английский суффикс порядкового числительно дня месяца в двух символах (st, nd, rd или th) W Номер дня недели (от 0 до 6) Z День в году (от 0 до 365) W Порядковый номер недели года в соответствии со стандартом ISO-8601, начиная с понедельника F Полное название месяца(например May) M Номер месяца с ведущим нулем (от 01 до 12) M Сокращенное название месяца 3-мя символами (от Jan до Dec) N Номер месяца без ведущего нуля (от 1 до 12) T Количество дней в заданном месяце (от 28 до 31) L Високосный год или нет (1 если да или 0 если н високосный) O Номер года в соответствии со стандартом ISO-8601 (Пример 2018) Y Номер года (Пример 2018) Y Номер года в двух цифрах (пример 03) PHP: Junior Kit 99 B Время в формате интернет-времени(от 000 до 999) G Часы в 12-часовом формате без ведущего нуля (от 1 до 12) G Часы в 24-часовом формате без ведущего нуля (от 1 до 23) H Часы в 12-часовом формате с ведущим нулем (от 01 до 12) H Часы в 24-часовом формате с ведущим нулем (от 01 до 23) I Минуты с ведущим нулем (от 00 до 59) S Секунды с ведущим нулем (от 00 до 59) U Микросекунды, функция date() всегда будет возвращать 000000 поскольку данная функция принимает только целые числа V Миллисекунды. Принимает также только целые числа как и date() E Идентификатор временной зоны (пример GTC) I Признак летнего времени(1 если да или 0 если нет) - Табл. 13 - Форматы времени для функций времени С этого можно сделать вывод - что ключей есть очень много и с помощью их мы можем сделать отображение любого вида даты и времени. Это кстати ещё не все ключи, которые доступны, есть также и другие ключи которые вы сможете посмотреть в официальной документации этой функции. PHP: Junior Kit 100 Что ж теперь точно можно сказать что данная функция очень полезна, поскольку теперь можно точно сказать что мы можем манипулировать временем. Для того чтобы мы могли задавать своё время то во втором аргументе функции date()надо вызвать функцию mktime(), с помощью которой мы и зададим желаемое нами время. Конечно можно создать переменную и внутри этой переменной указать функцию, и уже потом отформатировать заданное время через функцию date().Функция mktime() имеет целых 6 параметров которые вы можете указать. Внизу в небольшой таблице поданы все 6 параметров и описание за что они отвечают: Параметр Описание hour Количество часов которые прошли с начала указания параметров month, day и year. minute Количество минут прошедших после указания параметра hour. second Количество секунд прошедших после указания параметре minute. month Количество месяцев прошедших с конца предыдущего года. day Количество дней прошедших с конца предыдущего месяца. year Номер года. - Табл. 14 - Параметры функции mktime() Хорошо, а теперь давайте немного по практикуемся: PHP: Junior Kit 101 echo date("M-d-Y", mktime(0, 0, 0, 4, 25, 2018)); ?> Окей, ну и что мы только что сделали? Во-первых, заметьте то в какой способ мы отформатировали указанное время. Если мы запустим этот скрипт в браузере то увидим название месяца, день месяца и год который был указан с помощью функции mktime(). Конечно-же вы можете указать дату так как вы этого хотите и отформатировать в свой способ воспользовавшись таблицей с ключами для функции date() или официальной документацией разработчиков. Давайте рассмотрим ещё несколько примеров: $mydate = mktime(20, 45, 0, 4, 25, 2018); echo date("G i - d Y" , $mydate); ?> Этот пример намного интересен, кроме этого в датах можно также ставить противоположные знаки: $mydate = mktime(0, 0, 0, 3, -24, 2018); echo date("d Y", $mydate); ?> Только что мы рассмотрели один способ создания даты и времени в РНР, но кроме этого есть также и другой способ созданий даты напрямую через встроенный класс DateTime. Создание объекта даты напрямую: $mydate = new DateTime("18-04-25"); echo $mydate->format("Y-m-d"); ?> Как можно увидеть из примера то мы создали новый объект класса DateTime, после чего мы отформатировали объект функцией PHP: Junior Kit 102 которая встроена внутри этого класса - format. А чтобы изменить метку времени есть функция modify: $mydate = new DateTime("18-05-11"); $mydate->modify("+1 day"); $mydate->modify("+1 month"); echo $mydate->date("Y-m-d") ?> В этом примере, мы сделали модификацию нашей временной метки добавив, 1 день и 1 месяц в значение этого объекта. На этом я хочу завершить этот раздел об работе с датой. Если вы хотите узнать по больше об функциях для работы датой можете заглянуть в официальную документацию. PHP: Junior Kit 103 9 PHP и HTTP После того как мы изучили типы данных, логические операции, циклы, массивы, функции и принципы ООП можно начинать изучать более сложные вещи в PHP. У вас уже достаточно знаний чтобы начать двигаться дальше. От этого раздела мы уже начнём создавать небольшие простые мини веб-приложения в которых уже пользователь сможет взаимодействовать с самим веб-приложением. Для начала мы должны изучить как можно работать с формами. Я надеюсь что читатель знаком уже с основами языка разметки HTML и понимает что такое теги, атрибуты и как с ними правильно работать. Но перед тем как мы начнём я хочу выяснить два понятия. Первое это что такое входные данные и второе это что такое выходные данные. Не каждый новичок в программировании сразу поймет что это такое. Но вообще это очень просто. Когда мы вводим в программу какие то данные на обработку, то эти данные называются входными. После этого когда программа возвращает обработанные данные то эти данные уже называются выходными. А сейчас начнём изучать то о чем я говорил раньше. Внизу показана схема которая как раз и показывает принцип работы входных и выходных данных. Входны е Выходн ые Веб- приложен PHP: Junior Kit 104 - Рис. 6 - Схема которая демонстрирует работу входных и выходных данных 9.1 Работа с формами Сейчас мы создадим небольшую программу которая будет демонстрировать работу с формами в PHP. Но что же из себя представляет форма? Форма это объект внутри с помощью которого пользователь сможет передавать какие то данные на сервер приложения в котором находиться данная форма. После того как сервер получит данные от формы он сможет их обработать с помощью заданного скрипта для обработки формы. Внизу показан простой пример формы которая была создана на языке разметки HTML: - Рис. 7 - Пример простой формы для того чтобы авторизоваться Как вы можете заметить то в нашей форме есть два поля, в которые пользователь и будет заносить какие то данные, а также есть специальная кнопка чтобы отправить данные скрипту который и будет обрабатывать форму. Сейчас мы с вами создадим свою форму которая также будет иметь свои поля и скрипт который будет обрабатывать данные. Из сказанного выше можно понять что у нас будет два файла которые будут работать между собой. Один будет хранить в себе HTML- PHP: Junior Kit 105 код формы, а второй будет срабатывать тогда когда форма будет отправлена и обрабатывать полученные данные от формы. Пусть наша форма будет иметь только 2 поля, первое поле будет называться name т.е. это будет поле для имени как вы смогли понять, а второе поле это уже будет поле в которое пользователь может внести любую информацию и назовём это поле мы info. Хорошо, а теперь давайте как раз и создадим наш с вами скрипт, назвав его form.html: |