Вы находитесь на странице: 1из 14

Введение

<?php и ?> - это дескрипторы php.


Встраиваемый документ – это строковый синтаксис и выделяется при
помощи <<<HTML и HTML; – между ними будет html код. В него можно
вставлять переменные, а в актуальный документ – нельзя.
$_SERVER[PHP_SELF] – переменная, содержащая текущий URL страницы
без имени хоста. То есть в ссылке
http://www.example.com/users/enter.php, /users/enter.php является этой
переменной.
Ключевые слова языка и имена функций указываются без учета регистра
букв.
Обработка числовых и строковых данных
Переменная – это именованный контейнер, где хранится значение, которое
может меняться по ходу выполнения программы.
Числа с плавающей точкой обычно представлены в виде: 50.000002.
Ограничений на длину символьной строки в php нет.
Чтобы включить кавычку ‘ в символьную строку, перед ней ставится \. Такая
операция называется экранированием, а обратная косая черта называется
управляющим (экранирующим) символом.
Функция trim() – удаляет пробелы в начале и конце символьной строки.
Функция strcasecmp(1 val, 2 val) – позволяет сравнить две строки без учета
регистра.
Функция вывода printf() – работает как в C.
Функции strtolower(val) и strtoupper(val) делают буквы в символьной строке
строчными и прописными соответственно. Функция ucwords() делает
прописной первую букву каждого слова в символьной строке.
Функция substr(val, begin, число байт) используется для усечения
символьной строки. Если в begin указано отрицательное значение, тогда
отсчет будет вестись, отступившись от конца на begin байт. Если не указать
третий аргумент (число байт), тогда сечение будет до конца строки.
Присваивание переменным распространяется и на встроенные документы.
Иногда не совсем понятно где будет переменная в символьной строке,
поэтому она выделяется фигурными скобками:
$preparation = 'Braise';
1
print "<br>{$preparation}d $meat with Vegetables";
Управляющая логика для принятия решений и повторения операций
Пустой массив является false.
Чтобы правильно сравнить два числа с плавающей точкой необходимо
обозначить для них допустимую пороговую величину, к примеру 0.00001:
if(abs($price1 - $price2) < 0.00001) {
print “$price1 = $price2”;
}
При помощи strcmp(val 1, val 2) можно сравнить две строки с числами, не
боясь, что они будут преобразовываться в числовые значения. Она
возвращает положительное число, если первая строка больше второй,
отрицательное число, если первая строка меньше второй и 0, если они равны.
Составная операция типа «космические корабль»: <=>, делает то же самое,
что и strcmp(), только сравнивает любые типы данных. Сравнение числовых
символьных строк осуществляется аналогично операциям сравнения < и >,
но не функции strcmp().
Массивы
Скалярное значение – это данные, имеющие единственное значение. Массивы
содержат множество значений, поэтому они являются нескалярными.
Массивы создаются при помощи array(), а также при помощи пары
квадратных скобок – сокращенный синтаксис массивов.
Функция array_key_exists(ключ, массив) – проверяет, есть данный ключ в
массиве, возвращает 1 если есть, 0 если нет.
Функция in_array(значение, массив) – проверяет, есть ли данное значение в
массиве, возвращает 1 если есть, 0 если нет. Регистр букв учитывается.
Функция array_search(значение, массив) – работает как in_array, только
возвращает ключ искомого значения.
Функция unset(переменная) – удаляет значение обозначенного элемента.
Функция implode(разделитель, массив) – позволяет сразу вывести все
элементы массива через разделитель преобразуя его в строку.
Функция explode(разделитель, строка) – преобразует символьную строку в
массив.
Следующие функции сортировки всегда возвращают true.

2
Функция sort(массив) – сортирует массив по элементам в порядке
возрастания, желательно не сортировать ассоциативный массив, так как все
ключи заменятся на индексы. Функция rsort(массив) – по убыванию.
Чтобы отсортировать ассоциативный массив без изменения ключей,
необходимо использовать функцию asort(массив). Функция arsort(массив) –
по убыванию.
Функция ksort(массив) – сортирует массив по ключам в порядке
возрастания. Функция krsort(массив) – по убыванию.
Функция is_array(переменная) – проверяет, является ли переменная
массивом.
Функции и обращение к файлам
Функции в PHP коде можно объявлять в любом месте, до и после ее вызова.
Все необязательные аргументы по умолчанию в объявлении функции
должны идти после обычных (обязательных) аргументов.
Оператором return можно вернуть только одно значение. Если нужно вернуть
несколько, их нужно расположить в массиве, и вернуть массив.
Глобальные переменные – переменные, определенные за пределами функции
и существуют в одной области действия.
Локальные переменные – переменные, определенные в теле функции.
Есть способ обратиться в теле функции к переменной за ее пределами, для
этого в массив $GLOBALS нужно поместить эту переменную, причем без
знака $ и в кавычках:
print $GLOBALS[“переменная”];
Причем переменная с тем же названием в функции будет выполнять свое
назначение в независимости от глобальной переменной. Глобальную
переменную также можно изменить в самой функции.
Есть второй способ обратиться к переменной за ее пределами – поставить
перед ней слово global. Разница в том, что теперь любое изменение данной
переменной в теле функции (даже без слова global) приведет к ее изменению
и вне функции.
Запись function fun(arg1): float {…} означает, что функция может вернуть
только значение типа float.
Строка declare(strict_types=1); которую нужно объявлять в начале кода в
файле, означает, что аргументы и значения, возвращаемые любой функцией,
вызываемой в данном файле, должны строго соответствовать объявлениям
типов.

3
При помощи директивы require можно обратиться к любому файлу, к
примеру, к файлу с функциями, чтобы не хранить их в одном:
require ‘file.php’;
Директива include – аналог require, только первая не прервет выполнение
программы, в случае отсутствия файла или нужного кода в файле, а require
прервет.
ООП
Объект – это структура данных, объединяющая данные о каком-либо
предмете с действиями над этим предметом.
Класс – это шаблон или образец, описывающий переменные и функции для
конкретного вида объекта.
Свойство – это переменная, определенная в классе. Метод – это функция,
определенная в классе.
Конструктор – это специальный метод, который подготавливает объект к
применению.
Статический метод – это разновидность метода, который можно вызывать,
не получая экземпляр класса, и который не зависит от значений свойств
конкретного экземпляра. Для его вызова используется ::, вместо ->.
Метод-конструктор класса в php называется __construct(). Он предназначен
для того, чтобы после создания экземпляра класса его свойствам нельзя было
установить никакие значения, то есть свойства можно указать только при
создании экземпляра.
При помощи throw new Exception('сообщение'); можно сгенерировать
исключение, где throw – прерывает выполнение программы, new Exception –
создается новый объект типа Exception. Такое исключение называется
неперехватываемым.
Чтобы перехватить исключение используется конструкция:
try { выполнение программы, где случится ошибка
} catch (Exception переменная) {
print переменная->get_message();
}
В get_message() выведется текст сообщения, заданный для исключения при
его создании.
Таким образом происходит наследование:
class дочерний extends родительский {…}
Чтобы вызвать метод родительского класса в подклассе используют:
4
parent::__construct(переменные);
Если этого не сделать, то поведение родительского конструктора не будет
воспроизведено.
Модификаторы доступа private и protected делают свойства и методы класса
закрытыми и защищенными соответственно. Модификатор private запрещает
любому коду за пределами класса обращаться к свойству, а protected
разрешает обращаться за его пределами только из кода его подклассов.
Метод доступа (например, getName()) позволяет обращаться к закрытому
свойству вне класса, но только для чтения, изменить его не получится.
Веб-формы
Автоглобальный массив $_SERVER[‘PHP_SELF’] содержит путь к файлу
сценария на странице. При www.example.com/store/path.php элемент массива
$_SERVER[‘PHP_SELF’] будет содержать /store/path.php.
Обычно, метод GET означает извлечение обычной страницы, а метод POST –
передачу формы.
Проверка ‘POST’ == $_SERVER['REQUEST_METHOD'] означает,
передана ли на обработку форма или это запрос простой страницы.
Автоглобальный массив $_POST содержит ключи, обозначающие элементы
формы, а соответствующие им значения равны значениям в элементах
формы.
При помощи функции filter_input() можно проверять данные на тип, где
INPUT_POST – форма, где нужно искать данные, ‘price’ – значение (поле),
которое нужно проверить, FILTER_VALIDATE_FLOAT – проверять на то,
какой это тип, в данном случае пропустит только float. Если введенное
значение ‘price’ – float, то переменной занесется это значение, если значение
не введено, вернется null, если введено другого типа, вернется false:
$var = filter_input(INPUT_POST, 'price', FILTER_VALIDATE_FLOAT);
if (is_null($var) || ($var === false)) {
$errors[] = 'Please enter a valid price.';
}
Функция list() позволяет присвоить переменным значения массива:
$arr = [‘1’, ‘2’, ‘3’];
list(‘one’, ‘two’, ‘three’) = $arr;
Функция strip_tags($строка) удаляет дескрипторы HTML разметки из
символьной строки и возвращает строку без них. Работает только на
завершенные дескрипторы, то есть если будет введено “I <3 mon” будет
удалено все после <.
5
Похожая функция htmlentities($строка) кодирует все дескрипторы,
находящиеся в строке, в определенные символы.
Функция trim(‘строка’) убирает все пробелы в начале и конце строки.
Базы данных в PHP
SQL (Structured Query Language) язык структурированных запросов –
предназначен для составления запросов и указания команд для программы
базы данных. Программа на РНР посылает соответствующие запросы SQL
программе базы данных.
Подключение к программе БД mysql с помощью объекта типа PDO:
$db = new PDO('mysql:host=db.example.com;dbname=restaurant', 'penguin','top^hat');
Здесь 'mysql:host=db.example.com;dbname=restaurant' – это DSN (имя
источника данных), mysql – префикс, обозначающий тип подключаемой БД.
Далее после : через ; идут пары «ключ-значение», db.example.com – адрес, на
котором работает MySQL сервер, restaurant – название БД, которая
развернута на этом сервере.
Здесь penguin – это имя пользователя, top^hat – пароль. DSN, имя
пользователя и пароль – это соответственно первый, второй и третий
аргумент, передаваемый конструктору класса PDO.
try {
$db = new PDO(‘sqlite:/tmp/restaurant.db’);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$q = $db->exec(“CREATE TABLE dishes (
dish_id INT,
dish_name VARCHAR(255),
price DECIMAL(4,2),
is_spicy INT)”);
} catch (PDOException $e) {
print $e->getMessage();
}
Здесь вызов метода setAttribute() гарантирует, что расширение PDO
сгенерирует исключения, если возникнут затруднения при обработке
запросов, а не подключении к базе данных.
Метод exec() используется для отправки запроса в базу данных. Он
возвращает количество строк, затребованных в запросе SQL. Возвращает
false, если не удалось выполнить запрос.

6
Метод $error = $db->errorInfo(); возвращает трехэлементный массив, первый
элемент содержит стандартизированный код ошибки SQLSTATE, второй
элемент содержит код ошибки, характерный для конкретной базы данных, а
третий содержит текст сообщения, описывающего возникшую ошибку.
Безопасное занесение данных в БД с помощью команд prepare() и execute() с
использованием замещающих знаков (?):
$stmt = $db->prepare('INSERT INTO dishes (dish_name, price, is_spicy)
VALUES (?,?,?)');
$stmt->execute(array($_POST['new_dish_name'], $_POST['new_price'],
$_POST('is_spicy']));
Это делается для того, чтобы все значения были полностью введены в
кавычки. В prepare() на месте знаков вопроса будут занесены значения из
execute() в соответствующие места.
При помощи метода query() данные выбираются из таблицы:
$q = $db->query('SELECT dish_name, price FROM dishes');
При помощи метода fetch() извлекается каждая следующая строка (как из
очереди) и данные заносятся в переменную как в массив, поэлементно,
причем в двойном экземпляре, сначала как «ключ-значение», затем как
«индекс-значение»:
$row = $q->fetch();
При помощи метода fetchAll() извлекаются сразу все строки, в итоге
получается массив, в каждом элементе которого находится по одной строке
(эти строки нумеруются по индексам, в самих строках элементы содержатся
также в двойном экземпляре, по ключу и индексу):
$rows = $q->fetchAll();
Чтобы вернуть элементы не в двойном экземпляре, в функциях fetch() и
fetchAll() следует добавить следующие аргументы (стили извлечения):
PDO::FETCH_NUM – для извлечения массива только с индексами,
PDO::FETCH_ASSOC – для извлечения массива только с ключами.
Чтобы вернуть объект, а не массив, в этих же функциях следует передать
атрибут PDO::FETCH_OBJ. Имена свойств объекта, возвращаемого для
каждой строки, соответствуют именам столбцов.
При помощи метода setFetchMode() можно установить стиль извлечения по
умолчанию для извлечения из конкретной переменной:
$q->setFetchMode(PDO::FETCH_NUM);
Чтобы установить стиль извлечения по умолчанию для всех запросов, нужно
вызвать метод setAttribute() со следующим атрибутом:

7
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, стиль_извлечения);
С помощью метода quote() и функции strtr() переданное на обработку
значение делается безопасным для применения в предложении WHERE.
Метод quote() помещает переменную в кавычки, даже если в ней уже
содержатся кавычки, к примеру who’s, а функция strtr() экранирует знаком
обратной косой черты подстановочные символы % и _ в запросе SQL:
$coun = $db->quote($_POST['country_sender']);
$coun = strtr($coun, array('_' => '\_', '%' => '\%'));
$q = $db->query("SELECT country FROM package WHERE country LIKE $coun");
Работа с файлами
При помощи функции file_get_contents() все содержимое файла считывается
в символьную строку:
$раgе = file_get_contents(‘file.format’);
При помощи str_replace() можно видоизменить то, что считалось:
$раgе = str_replace('что_заменить', 'чем_заменить', $раgе);
При помощи file_get_contents() данные записываются в файл:
file_put_contents(‘записываемый_файл’, $раgе);
При помощи file(‘file.format’) возвращается массив, все строки файла
считываются как элементы массива.
Функция fopen() открывает файл и возвращает переменную для доступа к
файлу, fgets() считывает строку, возвращает ее и перемещает закладку на
следующую строку, feof() возвращает true, если достигнут конец файла (eof),
fclose() закрывает файл:
$f = fopen('page.txt', 'rb');
while (!feof($f) && $line = fgets($f)) {
print $line . "<br>";
}
fclose($f);
Если открыть файл в режиме записи, для записи будет использоваться
функция fwrite($f, ‘строка’).
Чтобы считать файлы CSV применяется функция fgetcsv($f), которая
возвращает строку как массив, содержащий каждое поле в данной строке.
Чтобы занести строки в файл CSV применяется функция fputcsv($f, массив).

8
При помощи функции file_exists(‘file.format’) проверяется, существует ли
файл, функция is_readable(‘file.format’) проверяет можно ли читать файл, а
функция is_writeable(‘file.format’) проверяет, можно ли записывать в файл.
В глобальной переменной $php_errormsg содержится сообщение об ошибке,
если отслеживание ошибок активизировано с помощью директивы
track_errors.
Cookie и сессии
Функция setcookie() устанавливает cookie-файл, значение может быть
ТОЛЬКО строковым или числовым, путь обычно обозначается просто ‘/’, так
как тогда cookie будут доступны во всем домене, пятый аргумент указывает,
что cookie станет доступными в нем и во всех его поддоменах, есть также 6-й
и 7-й аргументы, принимающие true, если cookie доступен только для https и
http протокола соответственно:
setcookie('cookie_file','значение', 'срок_действия', 'путь', '.example.com');
Чтобы вывести содержимое cookie-файла используется автоглобальный
массив COOKIE:
print $_COOKIE['userid']
Функция time() возвращает текущее количество секунд, прошедших после 1
января 1970 г. Истечение срока действия cookie-файла необходимо указывать
функции setcookie() в виде количества секунд, отсчитываемых от 1 января
1970 г.
Как правило, cookie-файлы посылаются обратно на сервер только вместе с
запросами страниц, находящихся в том же самом (или расположенном ниже)
каталоге, где располагается страница, на которой устанавливается cookie-
файл.
Удаление cookie-файла:
setcookie('userid','');
По умолчанию в сессиях применяется cookie-файл с названием PHPSESSID.
Данные сессии хранятся в автоглобальном массиве $_SESSION.
Чтобы очистить текущую сессию применяется:
setcookie(PHPSESSID, ‘’);
При помощи функции session_start() создается новая сессия для
пользователя, когда он впервые заходит на страницу, а на сервер посылается
cookie-файл PHPSESSID с новым идентификатором сеанса.
Данные сессии не ограничиваются символьными строками и числами, как в
cookie-файлах.

9
Директива session.gc_maxlifetime конфигурации определяет допустимое
время простоя между запросами, в течение которого сессия сохраняется
активной, по умолчанию у нее значение 1440 секунд (24 минуты).
Чтобы изменить время простоя между запросами используется функция
ini_set(), которая помещается перед session_start():
ini_set('session.gc_maxlifetime', 600); // 600 секунд == 10 минут
session_start();
Директива session.gc_probability содержит вероятность 1%, означающая, что
с такой вероятностью истекшая сессия будет очищена при каждом запросе,
чтобы ее изменить, опять применяется функция ini_set():
ini_set('session.gc_probability',100); // значение 100% означает
// полную очистку истекших сессий при каждом запросе
session_start();
При помощи функции password_hash() можно представить пароль в
хешированном виде, а функция password_verify() сравнивает введенный
пароль и сохраненный, используя информацию из сохраненного в
хешированном виде пароля, и возвращает true если они совпадают:
password_verify(введенный_пароль, сохраненный_пароль)
API
Функция http_build_query() позволяет преобразовать ассоциативный массив
в url адрес с учетом пробелов, расставлением необходимых знаков и прочее:
$params = array(
'api_key' => NDB_API_KEY,
'q' => 'black pepper',
'format' => 'json');
$url = "http://api.nal.usda.gov/ndb/search?". http_build_query($params);
Функция json_decode(‘строка_json’) преобразует объекты и массивы из
формата JSON в формат РНР.
Функция curl_init() возвращает дескриптор в виде переменной, которая
передается другим функциям для установки параметров и настройки режима
работы расширения cURL.
Функция curl_setopt() с параметром CURLOPT_RETURNTRANSFER
извещает от cURL о том, что при выполнении HTTP-запроса следует
возвратить ответ в виде символьной строки, иначе ответ выводится по мере
получения.

10
Функция curl_exec() выполняет запрос и возвращает результат его
обработки:
$c = curl_init('http://numbersapi.com/09/27');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$fact = curl_exec($c);
print $fact;

Отладка кода
Функция var_dump(переменная) выводит всю информацию о переменной,
включая тип данных, тип данных ее элементов и их значения (если это
массив) и т.д. в удобном виде.
При помощи функции set_exception_handler(функция_обработчик) можно
указать интерпретатору, какая функция будет обрабатывать исключения.
При помощи функции error_log("ERROR: " . $ex->getMessage()) можно
отправить сообщение об ошибке в журнал регистрации ошибок на сервере.
Тестирование программы
Метод $this->assertEquals(ожидаемое, получаемое) в классе,
наследованном от TestCase (PHPUnit) сравнивает значения и выдает в тесте
результат, либо '.', если тест прошел успешно, либо 'F', если тест провалился.
Утверждения, проверяемые в методах assertContains() и assertCount(),
пригодны для массивов. Первый проверяет, есть ли элемент в массиве,
второй, размер массива.
Метод assertSame() проверяет одинаковость элементов, как assertEquals(),
только сравнивает еще и тип.
Дата и время
При помощи класса DateTime() можно задать переменную, содержащую
информацию о времени (если не передаются аргументы, будут выбраны
текущая дата и время):
$d = new DateTime();
При помощи метода format(‘формат’) можно обращаться к конкретным
значениям даты и времени:
print $d->format('m/d/y'); //покажет в формате 10/20/16
Метод diff() возвращает разность между двумя датами в виде объекта типа
DateInterval:
11
$diff = $дата2->diff($дата1);
Перевод секунд от 1970 года в человекочитаемую дату:
$timeNow = date('Y-m-d H:i:s', time());
Composer
Чтобы установить composer, необходимо найти сам файл ‘composer.phar’,
закинуть его в папку с программой, и уже в этой папке выполнить команду:
php composer.phar require библиотека
После этого появится папка vendor, в ней будет файл autoload.php, который
теперь можно использовать для загрузки пакетов, написав в своей
программе:
require "vendor/autoload.php";
Чтобы обновить composer используется команда ‘composer self-update’.
Отправка писем по электронной почте
Отправка писем осуществляется при помощи библиотеки swiftmailer, где
сообщение отправляется оп протоколу SMTP (Simple Mail Transfer Protocol
— простой протокол пересылки электронной почты).
Фреймворки
Фреймворки по большей части решают следующие задачи:
 Маршрутизация – это преобразование URL с пользовательскими
запросами в конкретные функции и методы, предназначенные для
формирования ответов.
 Объектно-реляционное преобразование — способ трактовать строки из
таблицы базы данных в виде объектов в прикладном коде и предоставлять
для этих объектов методы, видоизменяющие содержимое базы данных.
 Управление пользователями — стандартные механизмы для ведения
информации о пользователях приложения и предоставления
пользователям прав выполнять определенные операции.
ООП продолжение
Инкапсуляция – это механизм, позволяющий изолировать те вещи, которые
должны быть скрыты при работе с объектом (к примеру, при помощи
private). Другими словами, это скрытие внутренней реализации (как свойств,
так и методов) объекта от внешних компонентов.
Методы, которые устанавливают private свойства принято называть
“Сеттер”, а которые возвращают – “Геттер”:
class Man{
private $name;
12
public function getName(){
return $this->name;
}

public function setName($name){


$this->name = $name;
}
}
Наследованный класс перенимает все свойства и метода от родителя,
имеющие доступ public и protected.
Переопределение метода – это процесс изменения метода в дочернем классе,
который был унаследован от родительского. При этом члены класса,
объявленные как public не могут стать private или protected в дочернем
классе, а члены класса, объявленные как protected, не могут стать private в
дочернем классе. Но, объявленные как protected в дочернем могут стать
public.
При помощи конструкции public final function метод (ключевое слово final),
в дочернем классе нельзя будет менять данный метод.
При помощи Название_класса::его_метод() можно вызывать нужный метод
в других классах, следующих по иерархии.
Абстрактный класс – это класс, по которому нельзя создавать экземпляр, но
можно наследоваться. Такой класс может содержать абстрактные методы,
которые должны быть нормально определены в потомках. Если класс имеет
хоть 1 абстрактный метод, то он обязан быть абстрактным.
Класс может наследоваться только от одного другого класса, но может
наследоваться от нескольких интерфейсов. Интерфейс в свою очередь
определяет методы без реализации, а класс затем применяет интерфейс и
реализует эти методы. Наследование от интерфейсов:
class название_класса implements интерфейс1, интерфейс2 {}
Если класс применяет интерфейс, то он должен реализовать все методы этого
интерфейса
Статическое свойство создается при помощи добавления перед названием
слова static, и инициализируется при создании первого экземпляра класса. К
такому свойству нельзя обращаться через $this, к нему нужно обращаться
через self::$статик_переменная.
В статическом методе также не доступна псевдопеременная $this.

13
Магический метод __call() вызывается тогда, когда вызван метод, которого
нет в классе.
Пишем сайт
Подготавливаем запрос, используя плейсхолдеры:
$name = 'Nick'; $age = 40; $login = 'user20';
$param = ['n' => $name, 'age' => $age, 'l' => $login];
$sql = "INSERT INTO users (name, age, login) VALUES (:n, :age, :l)"; // готовим
запрос с плейсхолдерами
$query = $connection->prepare($sql); // подготавливаем сам запрос
$query->execute($param);
Метод lastInsertId() возвращает id последней вставленной строки или
последовательное значение, с которым работал объект pdo (созданный при
new PDO):
$pdo->lastInsertId();
Функция password_hash(переменная, алгоритм_шифрования) шифрует
переменную в хеш-последовательность, используется для шифровки паролей
в БД:
password_hash($_POST['pass-second'], PASSWORD_DEFAULT);
Функция password_verify(введенный_пароль, пароль_из_бд) сравнивает
набор символов (введенный пароль) с захешированным функцией
password_hash() паролем, находящимся в БД:
password_verify($pass, $existence['password']);
Функция move_upload_file(файл, новый_путь) перемещает файл в новый
путь.

14

Вам также может понравиться