О нас
Разработчикам
Заметки
Переводчик
Транслитератор
Сравнить текст
Генератор пароля
Ip и информация
Создать картинку Webp
En
О нас
Разработчикам
En
Php
Контент
Язык Си как ориентир, 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 (добавить, заменить), POST (добавить, изменить, удалить), DELETE (удалить). 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(). */
Список
Loading...