О нас
Разработчикам
Заметки
Переводчик
Транслитератор
Сравнить текст
Генератор пароля
Ip и информация
О нас
Разработчикам
Заметки
Переводчик
Транслитератор
Сравнить текст
Генератор пароля
Ip и информация
Php
us.content
Язык Си как ориентир, Zen machine внутри php Система выделяет памяти по 256b memory_limit 128M Установить -1 чтобы использовать всю доступную память Куча - некакая область памяти. Zet val - определяет тип данных. Таблица символов - в ней хранятся имена, далее присваевание значения, т.е. связь. Есть глобальная таблица символов и есть локальные таблицы, например при создании функции, для каждой функции свою таблица символов. unset - удаляет имя в таблице символов и далее удаляется значение из кучи, в 2 этапа. $a = null; Присваевание null - разрыв связи с кучей. Ссылки - несколько значений в таблице символов, одно значение в кучи. Объекты всегда передаются по ссылки. Сборщик мусора (гарбич коллектор) - он приходит, когда в таблице символов более 10000 имён, при этом он останавливает скрипт, делает свою работу и далее скрипт продолжает свою работу. Утечка памяти - до версии PHP 5.3 можно наблюдать. Скалярные типы - int float bool string (Обычный массив называется скалярным или числовым, бывают ещё ассоциативные). Reflection API - отражения в PHP, о самом себе. Синтоксический сахар - написать код иначе. Тайп-хинтинг - механизм, который позволяет явно указывать типы параметров. Типизирование - стандартизация функционала классов использую интерфейсы. Инкапсуляция — механизм, позволяющий описывать данные и функции, оперирующие ими, в рамках класса, т.е. спрятать. Абстракный класс - нельзя создать объект. Абстракный метод - обязательно реализовать в классам наследниках. Интерфейс - не имеет реализации, это контракт на который мы подписываем класс, множественное наследование. Позднее статическое связывание static - для конкретного класса, т.е. для потомков. self - внутри класса. Паттерны: MVC, Singleton, Контейнер свойств, Registry, Interface(может объединяет множество подклассов при едином запуске), Фабричный метод, стратегия(позволяет менять выбранный алгорит рассчётов, независимо от объектов), Фасад(простой интерфейс к сложной системе классов), Строитель(builder - позволяет по шагово создавать свойства сложного класса), Делегирование(например Request в Laravel делегирует Validate), Адаптер(есть некий интерфейс запуска классов и если новый класс не подходит, то делаем адаптер), Канал событий(участвуют: издатель publisher, канал событий event channel, подписчики subscribers) и т.д. CRUD - Create Read Update Delete LAMP (LNMP) - распределённая архитектура, Linux, Apache (NGINX), MySQL, PHP. SOA - сервесно-ориентированная архитектура, делим приложение на микросервисы. SOAP - протокол обмена структурными сообщениями, как xml, json. REST - передача состояния представления. Все операции клиента с сервером stateless, т.е. сервер не должен хранить вообще никакой информации о клиенте – никаких сессий. Передача данных в том же виде, что и сами данные. Т.е. мы не заворачиваем данные в XML, как это делает SOAP и XML-RPC и т.д. Просто отдаем сами данные. Каждая единица информации однозначно определяется URL Т.е. например третья книга с книжной полки будет иметь вид /book/3, а 35 страница в этой книге — /book/3/page/35. Для HTTP действие над данными задается с помощью методов: GET (получить), PUT (добавить, заменить), PATCH (добавить, заменяет одно поле), POST (добавить, изменить, удалить), DELETE (удалить). Ответы сервера: 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 500 Internal Server Error 502 Bad Gateway 503 Service Unavailable SOLID: Принцип единственной ответственности (каждый класс решает одну задачу). Принцип открытости-закрытости (классы открыты для расширения и закрыты для изменения). Принцип подстановки Барбары Лисков (подклассы могли бы служить заменой для своих суперклассов, т.е. методы были реализованы у наследников, например через интерфейс). Принцип разделения интерфейса (каждый интерфейс решает одну задачу, чтобы от него не зависили классы). Принцип инверсии зависимостей (высокоуровневые компоненты не должны зависить от низкоуровневых). Полиморфизм это поддержка нескольких реализаций на основе общего интерфейса. Инкапсуляция это сокрытие данных и функциональности от клиентского кода. Cтек - используемые ресурсы. Рефакторинг кода. RunTime - стандартное (построчное) выполнение скрипта. Блокировки - проблема блокирощего ПО, чтения файлов, запрос в БД. PHP работает от запроса до ответа, кроме: Event loop - бесконечный цикл событий. React PHP - библиотека. Event loop, SetTimeout, Promise(обещание) и пр. $runTime1 = new \Parallel\RunTime(); $runTime1->($task1); // Многопоточно выполнить задачу Методология согласованная работа команды Agile - подходы к работе, люди и процессы важнее инструментов, работающий продукт важнее документации, прямое общение с заказчиком, изменчивость важнее плана. Scrun - для одного проекта одна команда. Клиент, продакт менеджер, backlog (epic глобальная задача или система c расстановкой приоритетов, story подзадачи epic, task задачи это подзадачи stories). Множество собраний (planning poker) на которых stories разбиваются на task. Оценивают stories в story point и время, задачи по времени, в статусе ToDo, назначаются ответственные, т.е. мы запустили спринт и в конце его должен быть результат. Статусы спринта: Todo, in progress, ready to test, done. Ретроспектива - собрание, что делалось хорошо или плохо в спринте и как сделать лучше. Плюс ежедневные 15 минутные собрания кто что делает. Kanban - работа по backlog по статусам PHP фраймфорки: Laravel, Lumen, Symfony, Yii, CodeIgniter, CakePHP JS фраймфорки: Gatsby, Vue, React, Angular, Node, Next Гипервизор - разделяет железо между несколькими системами. Виртуальный маршрутизатор, для связи между виртуальными машинами. <?php // Условие ? да : нет; // Тернарный оператор // https://habr.com/ru/post/280071/ // php7 echo $_SERVER['DOCUMENT_ROOT']; // Узнать абсолютный путь к файлу $user = $u ?? $y ?? null; // Если есть $u, то она, если есть $y, то она или null (сравнение с null) $user = $user ?: null; // $user = $test ? $test : null; $user = $u ?? null; // $user = isset($test) ? $test : null; $user = $user ?? null; $user ?? = null; // php 7.4 // Heredoc $name = 'Test'; echo <<<NAME Меня зовут "{$name}". Я печатаю/ NAME; $transport = array('foot', 'bike', 'car', 'plane'); $mode = current($transport); // $mode = 'foot'; // Взять первый элемент массива $mode = next($transport); // $mode = 'bike'; // Следующий элемент $mode = prev($transport); // $mode = 'foot'; // Предыдущий элемент $mode = end($transport); // $mode = 'plane'; // Последний элемент /* error_reporting(-1); выводит все ошибки (E_ALL) error_reporting(0); не выводит ошибки @ ставлю впереди функции, подавление ошибок phpinfo(); выводит все настройки php header('Content-Type: text/html; charset=utf-8'); или в файле .htaccess прописать AddDefaultCharset utf-8 php_flag default_charset utf-8 #писать если php старее 5,6 header('location: inc.php'); exit; Редирект без выполнения кода страницы header('refresh: 5; url=inc.php'); Редирект через 5 секунд echo не выводит объекты! var_dump выводит объекты print_r выводит объекты $obj instanceof SameClass принадлежит ли объект $obj к классу SameClass isset существует empty проверяет наличие переменной 404 Not Found (не найдено), 304 Not Modified (не изменялось) application/pdf (mime тип pdf файла) header('HTTP/1.0 404 Not Found'); // указание 404 страницы header('Content-Type: application/pdf; charset=utf-8'); header('Content-Disposition: attachment; filename="dowload.pdf"'); readfile('Logo_design.pdf'); exit; // Скачивание файла PDF $a = 'hello'; $$a = 'world'; // Переменные переменных ${'more' . $a}; // Переменные переменных {$fruits}s эти кавычки чтобы добавить букву к переменной "" в них действуют переменные $this - так называть нельзя, есть ещё список не желательных define("PAGE", "new page") константа - неизменная, чтобы вывести просто пишу без ковычек PAGE const PAGE2 = 'new const'; тоже константа, работает не ниже php 5,2, так определяется константа внутри класса и вначале кода <?php $test = 'test'; Можно не закрывать php код <?= $test; ?> короткий вывод переменной test ТИПЫ ДАННЫХ boolean логический true false регистро-независимый тип integer (int) целое число, отрицательные тоже, можно записывать без кавычек float дробное число, с плавающей точкой abs(-1) приводит число к положительному string строка, одинарные кавычки (имена переменных не обрабатываются), двойные кавычки (заключаю когда добавляю перенные в строку), обратный слэш \ экранирует спец символы <<<HERE здесь любая строка и перемнные видит — это аналог двойных кавычек heredoc HERE; между ними могу писать что угодно. После него что-то должно быть или закрыть php или пустая строка nowdoc в php с 5.3 одинарные кавычки <<<'HERE' здесь любая строка и перемнные видит — это аналог одинарных кавычек nowdoc, где не работают переменные HERE; NULL отсутствует значение ОПЕРАТОРЫ +, -, *, / Операнды - это цифры, которые прибавляем или другие действия как в математике % деление по модулю(остаток по делению) ** возведение в степень в версии 5.6 раньше использовалась функция echo pow(2,3) два в третий степени = присваивание &$a присваивание по ссылке ++ инкремент +1 -- дескремент -1 префиксный ++1 потом увеличивает на 1 постфикный 1++ вначале увеличивает на 1 . конкатинация, склеевание строк += текущее значение и прибавить .= текущее значение и прибавляем приклеевание == сравнение === строгое сравнение ! не равенство, инверсия && AND || OR xor это тоже что или, но не оба Управляющие последовательности РАБОТАЮТ В ДВОЙНЫХ КАВЫЧКАХ \n или PHP_EOL новая строка \t табуляция \v вертикальная табуляция WHILE простой цикл FOR for ($i = 1; $i < 11; $i++) { echo $i . "<br>"; } Задать три параметра: начало номерации, условие, завершение счётчика BREAK остановить continue пропустить include 'inc/inc.php' подключаю файл, при ошибке сайт продолжает работу require при ошибке сайт не показывает контент include_once один раз подключается, при ошибке сайт продолжает работу require_once один раз подключается, при ошибке сайт не показывает контент. Его использовать! */ $connect = @mysql_connect('localhost', 'root', 'password', 'name') || die('Ошибка соединения с БД'); // если нет соединение, остановка и вывод сообщения, или можно посиотреть ошибку die(mysqli_error($connect)); mysqli_set_charset($connect, "utf8"); // Установить кодировку в БД, utf8 написано без дефиса! $i = 11; // Цикл do do { echo "<br>" . $i++ . "<br>"; } while ($i <= 10); $i = 1; // Цикл while while ($i <= 10) { echo "<br>" . $i++ . "<br>"; } // Создание таблицы $i = 1; echo "<table>\n"; while ($i <= 10) { echo "\t<tr>\n"; $n = 1; while ($n <= 5) { echo "\t\t<td>row - $i and col - $n</td>\n"; $n++; } echo "\t</tr>\n"; $i++; } echo "</table>\n"; // Select с 1990 года $year = 1900; echo "<select>/n"; while ($year <= 2017) { echo "\t<option value='$year'>$year</option>/n"; $year++; } echo "</select>"; // Select с 1990 года echo "<select>/n"; for ($year2 = 1900; $year2 <= 2017; $year2++) { echo "\t<option value='$year2'>$year2</option>/n"; } echo "</select>"; // Таблица умножения $row = 1; echo "<table>\n"; while ($row <= 9) { echo "\t<tr>\n"; $col = 1; while ($col <= 9) { echo "\t\t<td>$row * $col = " . $row * $col . "</td>\n"; $col++; } echo "\t</tr>\n"; $row++; } echo "</table>\n"; // Таблица умножения echo "<table>\n"; for ($row = 1; $row <= 9; $row++) { echo "\t<tr>\n"; for ($col = 1; $col <= 9; $col++) { echo "\t\t<td>$row * $col = " . $row * $col . "</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // Вывести из массива название и цену while ($i <= 2) { echo $goods[$i]['title'] . ' - ' . $goods[$i]['price']; echo "<br>"; $i++; } // Вывести все элементы массива, где ключи цифровые и идут по порядку for($i = 0; $i < count($arr); $i++) { echo $arr[$i] . '<br>'; } //foreach выводи содержание массива, создавая новые переменные $arr = ['ivanov', 'petrov', 'sidorov']; foreach ($arr as $key => $value) { echo "Name: $key, Surname: $value <br>"; } ?> <?php foreach ($arr as $key => $value): ?> <!-- Альтернативный синтаксис вывода html для foreach --> "Name: <?php echo $key?>, Surname: <?php echo $value ?> <br> <?php endforeach; ?> <?php // Break остановка цикла for ($i=0; $i < 30; $i++) { echo $i . '<br>'; if ($i == 5) { echo "<h4>Good</h4>"; break; } } // Continue пропускаем элемент цикла 5 и 10 for ($i=0; $i < 30; $i++) { if ($i == 5 || $i == 10) continue; echo $i . "<br>"; } // Continue пропускаем диапозон цикла с 5 до 10 for ($i=0; $i < 30; $i++) { if ($i >= 5 && $i <= 10) continue; echo $i . "<br>"; } // switch $var = 3; switch ($var) { case 1: echo "Var = 1"; break; case 2: echo "Var = 2"; break; case 3: echo "Var = 3"; break; default: echo "no"; } // Альтернативный синтаксис вывода html для if, while, for, foreach, switch $bool = true; $var = test; ?> <?php if($bool): ?> <h2><?php echo "$var"; ?></h2> <?php endif; ?> <?php //ФОРМЫ ОТПРАВКИ if (isset($_POST['send'])) // Распечатать массивы, если существует $_POST { echo '<pre>'; print_r($_POST); echo '</pre>'; } if (!empty($_GET)) // Распечатать массивы, если не пуст $_GET { echo '<pre>'; print_r($_GET); echo '</pre>'; } // в массив попадает name="name" и alue="name" ?> <a href="index.php?name=Петя&test=123&subject=TEST">link</a> // Задать значение GET <form method="post" action="" enctype="multipart/form-data"> <p> <input type="text" name="name"> </p> <p> <textarea name="text"></textarea> </p> <p> <input type="checkbox" name="remember"> </p> <p> <select name="lang[]" multiple=""> <option value="eng">English</option> <option value="ru">Russian</option> <option value="jp">Japan</option> </select> </p> <p> <input type="file" name="file"> </p> <p> <button type="submit" name="send" value="test">Send</button> </p> </form> <hr> <p>Введенное имя: <?php if(!empty($_POST['name'])) echo $_POST['name']; else echo 'форма не отправлена';?></p> <?php //условие ? да : нет ?> <p>Введенный текст: <?php echo !empty($_POST['text']) ? nl2br($_POST['text']) : 'форма не отправлена' ?></p> <p> <?php if(isset($_POST['remember']) && $_POST['remember'] == 'on') echo 'Чекбокс отмечен' ?> </p> <?php if (isset($_POST['send'])) { echo '<pre>'; print_r($_POST); echo '</pre>'; } if (!empty($_FILES)) { echo '<pre>'; print_r($_FILES); echo '</pre>'; move_uploaded_file($_FILES['file']['tmp_name'], 'upload/' . $_FILES['file']['name']); // Перемещаем файл } // ДЛЯ СЕРВЕРА echo $_SERVER['REQUEST_URI']; // Текущая страница echo $_SERVER['HTTP_REFERER']; // Страница, с которой перешли echo $_SERVER['REMOTE_ADDR']; // IP адрес пользователя echo $_SERVER['PHP_SELF']; // Имя файла относительно корня, который сейчас выполняется, к примеру: index.php, хорошо использовать для редиректа к примеру: header("Location: {$_SERVER['PHP_SELF']}"); exit; echo $_SERVER['SERVER_NAME']; // Имя сервера echo $_SERVER['QUERY_STRING']; // Строка GET запросов echo $_SERVER['DOCUMENT_ROOT']; // Директория от корня echo $_SERVER['HTTP_HOST']; // Имя хоста echo $_SERVER['HTTP_USER_AGENT']; // Информация о браузере пользователя // СЕССИИ session_start(); unset($_SESSION['name']); // Удалить значение в сессии session_unset(); // Удалить все переменные в сессии session_destroy(); // Удаляет файл сессии session_id(); //узнать id сессии //КУКИ setcookie('name', 'value', time() + 3600 * 24 * 30, '/', true, true); // Установка куки (3 - на месяц, 4 - означает https, 5 - делает её не доступной для JS) echo $_COOKIE['name']; // Выводим созданную куку setcookie('name', '', time()-3600, '/'); // Удаляем куку isset($_COOKIE['couter']) ? setcookie(['counter'], ++$_COOKIE['counter'], time()+3600, '/') : setcookie(['counter'], 1, time()+3600, '/'); //КУРЛ $url = 'https://ya.ru'; $c = curl_init($url); $res = curl_exec($c); curl_close($c); echo $res; // Вывести содержимое веб-страницы if ($curl = curl_init()){ $data = [ 'id' => $id, 'key' => $key, 'command' => $command, ]; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt( curl, CURLOPT_POSTFIELDS, http_build_query($data)); curl_exec($curl); curl_close($curl); } // Запрос POST // Functions $f = function($x) { return $x * 2; } $f = function() { function($y) { return $y * 2; } } echo $f()(5); // Замыкание $x = 'test'; $f = function($y) use ($x) { return $x * $y; } // $args - любое кол-во аргументов или массив function sum(...$args) { array_sum($args); } // Heredoc $name = 'Test'; echo <<<NAME Меня зовут "$name". Я печатаю/ NAME; // php 7 $a <=> $b; //Spaceship меньше или равно или больше echo $user = $_GET['user'] ?? 'guest'; //если get то get, иначе null echo $user = $_GET['user'] ?? $_GET['user2'] ?? 'guest'; //если get['user'] то get['user'], если get['user2'] то get['user2'], иначе null use some\namespase\{ClassA, ClassB, ClassC}; //объединяет файлы с одинаковым пространстовом имён // Висячая запятая допускается в параметрах php7.4 // php 8 Именованные аргументы function division($x, $y): float { return $x / $y; } echo division(y: 2, x: 10); // Порядок становится неважен // Объединенные типы function division(int|float $x, int|float $y): float { return $x / $y; } // Тип mixed function test(mixed $a) { echo $a; } // Эквивалент array|bool|callable|int|float|null|object|resource|string // Оператор (выражение) match echo match ($color) { 'red' => 'красный', 'yellow' => 'желтый', 'green' => 'зеленый', } // Изменилось сравнение строк и чисел! 'foo' == 0 // true раньше 'foo' == 0 // false сейчас // Null-безопасный оператор if (null !== $session) { if (null !== $session->user { if (null !== $session->user->name) { echo $session->user->name; } } } echo $session?->user?->name; // Можно так написать // Объявление свойств в конструкторе class Person { public string $name; public int $age; public function __construct(string $name, int $age) { $this->name = $name; $this->age = $age; } } class Person { public function __construct( public string $name, public int $age ) {} } // Можно так написать // Just-In-Time компиляция // Изменить настройки php.ini ini_set('upload_max_filesize', '20M'); ini_set('post_max_size', '20M'); // 'max_execution_time', 1800 /** * * PHPDoc: * * @return array - Что возвращает (@return void означает, что не возвращает ничего). * * @property int $id - Означает какие свойства есть у объекта и какого типа. * @param - описывает входящие параметры. * @var - используется для документирования обычных переменных. Можно использовать если PhpStorm не видит переменную. * * @example - используется для размещения ссылки на файл или веб-страницу, где показан пример использования кода. * @todo - напомнить себе доделать. * @method (класс) — применяется к классу и служит для описания магических методов, которые обрабатываются магической функцией __call(). */
Список