Списочный тип данных, также известный как список, представляет собой структуру данных, которая хранит упорядоченные коллекции элементов. Списки позволяют хранить наборы элементов, доступ к которым можно получить по индексу. Они широко используются в программировании благодаря своей гибкости и удобству.
Элементы в списке хранятся в определенном порядке, и этот порядок сохраняется. Каждый элемент имеет индекс, по которому к нему можно обратиться.
Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка.
В списке могут храниться элементы различных типов данных (например, числа, строки, объекты).
Python
my_list = [1, 2, 3, 'a', 'b', 'c']
my_list.append(4) # Добавление элемента
print(my_list[2]) # Доступ к элементу по индексу (вывод: 3)
Java
import java.util.ArrayList;
ArrayList<Object> myList = new ArrayList<>();
myList.add(1);
myList.add("hello");
System.out.println(myList.get(1)); // Доступ к элементу по индексу (вывод: hello)
PHP
$myList = array(1, 2, 3, 'a', 'b', 'c');
array_push($myList, 4); // Добавление элемента
echo $myList[2]; // Доступ к элементу по индексу (вывод: 3)
Списки позволяют легко добавлять, удалять и изменять элементы.
Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями.
Доступ к элементам по индексу позволяет эффективно манипулировать данными.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
1. В Active Record бизнес-логика и операции работы с базой данных объединены в одном классе.
2. Это усложняет поддержку, тестирование и расширение кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Это метод оптимизации памяти, используемый для увеличения эффективности. Когда несколько процессов или потоки обращаются к одному и тому же ресурсу (например, области памяти), создаётся одна копия ресурса, которая используется совместно до момента изменения. Если процесс хочет изменить ресурс, создаётся его собственная копия, чтобы сохранить изоляцию изменений. Пример: массив передаётся функции. Пока он не изменяется, память общая. При изменении создаётся отдельная копия массива. Применяется в PHP для управления объектами, массивами и значениями, особенно после версии PHP 5.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3💊3👍1
2. URL Encoding: преобразование специальных символов в безопасный формат для URL.
3. ASCII и Unicode: для кодировки символов.
4. JSON и XML: для структурирования данных.
5. UTF-8: стандарт кодировки текста.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1
Фильтрацию данных в PHP можно делать в нескольких местах в зависимости от контекста. Основные области фильтрации:
Когда мы получаем данные от пользователя (
$_GET, $_POST, $_REQUEST), важно очищать их от нежелательных значений. $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
Фильтрация массива
$_POST через filter_var_array() $filters = [
'name' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => FILTER_VALIDATE_INT
];
$filteredData = filter_var_array($_POST, $filters);
Перед вставкой в SQL важно удалять потенциально опасные символы, чтобы избежать SQL-инъекций.
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
':name' => htmlspecialchars($_POST['name']),
':email' => $_POST['email']
]);Если данные поступают из разных источников, мы можем использовать фильтрующие функции PHP:
Очистка строки от HTML
$cleanText = strip_tags("<h1>Hello</h1>"); // "Hello"Удаление пробелов
$trimmed = trim(" example "); // "example"Приведение к числу
$number = filter_var("42abc", FILTER_SANITIZE_NUMBER_INT); // 42Перед выводом в браузер очищаем данные от HTML/JS-кода, чтобы злоумышленник не внедрил скрипты.
echo htmlspecialchars("<script>alert('Hacked!')</script>");
// Выведет: <script>alert('Hacked!')</script>Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
• Low Coupling (низкая связанность): уменьшение зависимости между модулями, чтобы изменения в одном модуле минимально затрагивали другие.
• High Cohesion (высокая связность): логически связанные функции и данные группируются в одном модуле, делая его функционально независимым.
Совмещение этих принципов упрощает сопровождение и тестирование кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Пространства имён (
namespace) в PHP используются для разделения кода и предотвращения конфликтов имён классов, функций и констант. Избегают конфликтов имён (если два разных файла объявляют одинаковые классы).
Упрощают организацию кода (структура похожа на файловую систему).
Работают с автозагрузкой (PSR-4) – Composer использует
namespace для загрузки файлов. Без пространства имён – конфликт классов
// Файл: models/User.php
class User {
public function getRole() {
return "Пользователь";
}
}
// Файл: controllers/User.php
class User {
public function getRole() {
return "Администратор";
}
}
// Ошибка! PHP не знает, какой User использовать.
$user = new User();
С
namespace – классы разделены // Файл: models/User.php
namespace App\Models;
class User {
public function getRole() {
return "Пользователь";
}
}
// Файл: controllers/User.php
namespace App\Controllers;
class User {
public function getRole() {
return "Администратор";
}
}
// Используем классы с указанием namespace
$modelUser = new App\Models\User();
echo $modelUser->getRole(); // ✅ "Пользователь"
$controllerUser = new App\Controllers\User();
echo $controllerUser->getRole(); // ✅ "Администратор"
Вместо длинных
App\Models\User, можно импортировать use App\Models\User;
$user = new User(); // PHP понимает, что это App\Models\User
Пространства имён работают не только с классами, но и с функциями и константами.
namespace Utils;
function hello() {
return "Привет!";
}
echo hello(); // ✅ "Привет!"
echo \Utils\hello(); // ✅ "Привет!" (полный путь)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
JOIN – это операция в SQL, которая позволяет объединять данные из двух или более таблиц на основе общего поля. В SQL есть 5 основных видов
JOIN пересечение двух таблиц (только совпадающие записи).
все записи из левой таблицы + совпадения из правой.
все записи из правой таблицы + совпадения из левой.
объединяет все записи из обеих таблиц.
декартово произведение (каждая строка первой таблицы соединяется с каждой строкой второй).
Возвращает только те строки, у которых есть совпадения в обеих таблицах.
SELECT users.id, users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
Возвращает все записи из левой таблицы, а если в правой нет совпадения – подставляет
NULL. SELECT users.id, users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Например, \strlen() вызовет глобальную функцию strlen, а не её версию из текущего namespace.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Функциональное программирование (FP) – это парадигма программирования, в которой основное внимание уделяется использованию функций как первичных элементов кода. Код строится из чистых функций, без изменения состояний и без побочных эффектов.
чистые функции всегда дают один и тот же результат для одних и тех же входных данных.
код предсказуем и изолирован.
нет глобальных переменных и скрытых состояний.
нет изменяемых данных, значит, нет конфликтов в многопоточности.
Чистые функции (Pure Functions)
Иммутабельность (Immutable Data)
Функции высшего порядка (Higher-Order Functions)
Функциональные композиции
Отсутствие побочных эффектов
Это функция, которая:
Возвращает один и тот же результат для одинаковых аргументов.
Не изменяет внешние переменные и не имеет побочных эффектов.
$total = 0;
function addToTotal($num) {
global $total;
$total += $num;
return $total;
}
Пример чистой функции
function add($a, $b) {
return $a + $b;
}
echo add(3, 4); // 7В FP данные не изменяются – вместо изменения переменных создаются новые.
$arr = [1, 2, 3];
$arr[] = 4; // Изменяет массив
Пример иммутабельности
$arr = [1, 2, 3];
$newArr = array_merge($arr, [4]); // Создает новый массив
Это функции, которые:
Принимают другие функции в качестве аргументов.
Возвращают другие функции.
function applyFunction($func, $value) {
return $func($value);
}
$square = function ($x) {
return $x * $x;
};
echo applyFunction($square, 5); // 25Вместо длинных процедур можно сочетать функции.
function double($x) {
return $x * 2;
}
function increment($x) {
return $x + 1;
}
function compose($f, $g) {
return function ($x) use ($f, $g) {
return $f($g($x));
};
}
$doubleThenIncrement = compose('increment', 'double');
echo $doubleThenIncrement(3); // (3 * 2) + 1 = 7Функции не должны изменять внешние данные (например, глобальные переменные, файлы, БД).
function logMessage($message) {
file_put_contents("log.txt", $message, FILE_APPEND);
}Функция без побочных эффектов:
function formatMessage($message) {
return strtoupper($message);
}
echo formatMessage("hello"); // HELLOPHP – это не чисто функциональный язык, но поддерживает FP-стиль:
array_map() – применяет функцию ко всем элементам массива. array_filter() – фильтрует массив по функции. array_reduce() – сворачивает массив в одно значение. $numbers = [1, 2, 3, 4, 5];
// Умножаем каждый элемент на 2
$doubled = array_map(fn($x) => $x * 2, $numbers);
print_r($doubled); // [2, 4, 6, 8, 10]
// Фильтруем только четные числа
$evens = array_filter($numbers, fn($x) => $x % 2 === 0);
print_r($evens); // [2, 4]
// Суммируем все числа
$sum = array_reduce($numbers, fn($carry, $x) => $carry + $x, 0);
echo $sum; // 15
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1💊1
1. Используется для эффективного поиска по словам или фразам в текстовых полях.
2. Применяется в MySQL, PostgreSQL, ElasticSearch и других системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда проекты растут, а требований становится больше, скорость разработки начинает упираться не в язык или фреймворки, а в процессы, инструменты и организацию работы.
С 1 по 5 декабря конференция Podlodka PHP Crew собирает сезон о том, как разгонять PHP-разработку без стресса и перегрузов.
📌 В программу вошли новые доклады:
🧩 Тесты для ускорения — Александр Макаров (Twindo): о роли тестирования в скорости разработки, какие виды тестов действительно дают ускорение, и как распределить ответственность между разработчиками, QA и LLM.
📄 Контракты пишем — код генерим — Александр Забанов (Вебпрактик): contract-first подход, который снижает количество ошибок и делает интеграции предсказуемыми.
🧱 Платформа как LEGO — Антон Комарев (BelkaCar): как собрать внутреннюю платформу для разработчиков из готовых «кубиков» и убрать хаос внутренних тулов.
🎛 Фича-флаги — Сергей Волошин (Вебпрактик): как перейти от «деплой = релиз» к гибкому управлению функциональностью и выпускать код хоть каждый час.
💡Все темы прикладные, с упором на ускорение команд и уменьшение рутины.
🔗 Программа и билеты: https://podlodka.io/phpcrew
С 1 по 5 декабря конференция Podlodka PHP Crew собирает сезон о том, как разгонять PHP-разработку без стресса и перегрузов.
📌 В программу вошли новые доклады:
🧩 Тесты для ускорения — Александр Макаров (Twindo): о роли тестирования в скорости разработки, какие виды тестов действительно дают ускорение, и как распределить ответственность между разработчиками, QA и LLM.
📄 Контракты пишем — код генерим — Александр Забанов (Вебпрактик): contract-first подход, который снижает количество ошибок и делает интеграции предсказуемыми.
🧱 Платформа как LEGO — Антон Комарев (BelkaCar): как собрать внутреннюю платформу для разработчиков из готовых «кубиков» и убрать хаос внутренних тулов.
🎛 Фича-флаги — Сергей Волошин (Вебпрактик): как перейти от «деплой = релиз» к гибкому управлению функциональностью и выпускать код хоть каждый час.
💡Все темы прикладные, с упором на ускорение команд и уменьшение рутины.
🔗 Программа и билеты: https://podlodka.io/phpcrew
Когда проекты растут, а требований становится больше, скорость разработки начинает упираться не в язык или фреймворки, а в процессы, инструменты и организацию работы.
С 1 по 5 декабря конференция Podlodka PHP Crew собирает сезон о том, как разгонять PHP-разработку без стресса и перегрузов.
📌 В программу вошли новые доклады:
🧩 Тесты для ускорения — Александр Макаров (Twindo): о роли тестирования в скорости разработки, какие виды тестов действительно дают ускорение, и как распределить ответственность между разработчиками, QA и LLM.
📄 Контракты пишем — код генерим — Александр Забанов (Вебпрактик): contract-first подход, который снижает количество ошибок и делает интеграции предсказуемыми.
🧱 Платформа как LEGO — Антон Комарев (BelkaCar): как собрать внутреннюю платформу для разработчиков из готовых «кубиков» и убрать хаос внутренних тулов.
🎛 Фича-флаги — Сергей Волошин (Вебпрактик): как перейти от «деплой = релиз» к гибкому управлению функциональностью и выпускать код хоть каждый час.
💡Все темы прикладные, с упором на ускорение команд и уменьшение рутины.
🔗 Программа и билеты: https://podlodka.io/phpcrew
С 1 по 5 декабря конференция Podlodka PHP Crew собирает сезон о том, как разгонять PHP-разработку без стресса и перегрузов.
📌 В программу вошли новые доклады:
🧩 Тесты для ускорения — Александр Макаров (Twindo): о роли тестирования в скорости разработки, какие виды тестов действительно дают ускорение, и как распределить ответственность между разработчиками, QA и LLM.
📄 Контракты пишем — код генерим — Александр Забанов (Вебпрактик): contract-first подход, который снижает количество ошибок и делает интеграции предсказуемыми.
🧱 Платформа как LEGO — Антон Комарев (BelkaCar): как собрать внутреннюю платформу для разработчиков из готовых «кубиков» и убрать хаос внутренних тулов.
🎛 Фича-флаги — Сергей Волошин (Вебпрактик): как перейти от «деплой = релиз» к гибкому управлению функциональностью и выпускать код хоть каждый час.
💡Все темы прикладные, с упором на ускорение команд и уменьшение рутины.
🔗 Программа и билеты: https://podlodka.io/phpcrew
👍1
Принцип Dependency Inversion (DIP) гласит:
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций (интерфейсов).
Код не должен зависеть от конкретных классов, а должен работать через интерфейсы или абстракции.
Это делает код гибче и меньше зависящим от деталей реализации.
Плохой код (без инверсии зависимостей)
class MySQLDatabase {
public function connect() {
return "Подключение к MySQL";
}
}
class UserRepository {
private MySQLDatabase $db; // Жёсткая зависимость!
public function __construct() {
$this->db = new MySQLDatabase();
}
}Хороший код (через интерфейс, следуя DIP)
interface DatabaseInterface {
public function connect();
}
class MySQLDatabase implements DatabaseInterface {
public function connect() {
return "Подключение к MySQL";
}
}
class PostgreSQLDatabase implements DatabaseInterface {
public function connect() {
return "Подключение к PostgreSQL";
}
}
class UserRepository {
private DatabaseInterface $db;
public function __construct(DatabaseInterface $db) {
$this->db = $db;
}
}
// Теперь можно подставить любую базу данных!
$mysqlRepo = new UserRepository(new MySQLDatabase());
$pgRepo = new UserRepository(new PostgreSQLDatabase());Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
• Быстрый доступ для равенств (=) и точных запросов.
• Не подходит для диапазонных запросов.
2. B-Tree индекс:
• Оптимален для диапазонных запросов и сортировки.
• Поддерживает равенства и сравнения (<, >).
• Медленнее hash-индекса для точного поиска.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Использование
JOIN в SQL может привести к нескольким проблемам, особенно при работе с большими таблицами. Рассмотрим основные из них. Чем больше данных соединяется, тем больше ресурсов требуется.
Проблема:
JOIN создаёт временную таблицу в памяти, что замедляет запрос. Если нет индексов, соединение идёт через полный перебор (Nested Loop Join), что очень медленно. Решение:
Добавить индексы на поля, по которым идёт соединение.
Использовать
EXPLAIN для анализа запроса. EXPLAIN SELECT * FROM users JOIN orders ON users.id = orders.user_id;
Если используется
JOIN, но нет условия соединения (ON), запрос создаст все возможные комбинации строк. Проблема:
SELECT * FROM users, orders;
Решение
Всегда указывать
ON или USING: SELECT * FROM users JOIN orders ON users.id = orders.user_id;
INNER JOIN возвращает только совпадающие строки, из-за чего можно потерять данные. Проблема
SELECT users.id, users.name, orders.id AS order_id
FROM users
INNER JOIN orders ON users.id = orders.user_id;
Решение: Использовать
LEFT JOIN, если нужны все пользователи, даже без заказов: SELECT users.id, users.name, orders.id AS order_id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
JOIN по строковым полям (VARCHAR, TEXT) работает медленнее, чем по числовым (INT). Проблема
SELECT * FROM users JOIN orders ON users.email = orders.email;
Если соединяются таблицы с разными типами данных (
INT vs VARCHAR), может быть скрытое приведение типов, которое замедляет запрос. Проблема
SELECT * FROM users
JOIN orders ON users.id = orders.user_id;
Решение
- Убедиться, что типы данных совпадают (
INT = INT). - Привести к нужному типу:
SELECT * FROM users
JOIN orders ON users.id = CAST(orders.user_id AS INT);
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Оно помогает организовывать код, делает его более читаемым и управляемым. Также снижает вероятность конфликта имен при работе с библиотеками или крупными проектами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM