LibCode
Под капотом PHP: Как текст превращается в веб-страницу
Для большинства разработчиков написание кода на PHP выглядит магически просто. Вы создаете файл "index.php", пишете там пару строк, нажимаете «Обновить» в браузере — и результат перед глазами.
Эта простота обманчива. Она создает иллюзию того, что PHP — это медленный интерпретатор, который читает ваш код сверху вниз, как стихотворение, спотыкаясь о каждую запятую. На самом деле современный PHP (версии 7 и 8) устроен гораздо сложнее и ближе к таким языкам, как Java или C#, чем к старым скриптовым технологиям.
Давайте разберем путь вашего кода от нажатия клавиши Enter до появления пикселей на мониторе пользователя.
Когда сервер получает запрос к .php файлу, управление берет Zend Engine — сердце языка. Но процессор компьютера не понимает команды типа
Эта простота обманчива. Она создает иллюзию того, что PHP — это медленный интерпретатор, который читает ваш код сверху вниз, как стихотворение, спотыкаясь о каждую запятую. На самом деле современный PHP (версии 7 и 8) устроен гораздо сложнее и ближе к таким языкам, как Java или C#, чем к старым скриптовым технологиям.
Давайте разберем путь вашего кода от нажатия клавиши Enter до появления пикселей на мониторе пользователя.
Этап 1. Лексический анализ (Токенизация)
Когда сервер получает запрос к .php файлу, управление берет Zend Engine — сердце языка. Но процессор компьютера не понимает команды типа
$user = 'Alex';. Сначала работает лексер (Lexer, утилита re2c). Он сканирует ваш текстовый файл и разбивает его на токены — элементарные кирпичики языка:
- Открывающий тег
<?php. - Переменная
$user. - Оператор при
- Жалоба
Как обновить старый синтаксис PHP-обработчиков (Стрелочные функции)
В старых PHP-проектах (Особенно в движках форумов и CMS, написанных в 2010‑х) часто встречается однотипный шаблон: обработка BBCode через
Такой код рабочий, но визуально тяжёлый и избыточный. Современный PHP (начиная с версии 7.4) позволяет сделать его чище, лаконичнее и удобнее в поддержке — за счёт стрелочных функций.
Типичный старый вариант выглядит так:
Здесь три «лишних» элемента:
Это не ошибка, но в проектах с десятками подобных обработчиков такой стиль делает...
preg_replace_callback с обычными анонимными функциями, где для доступа к $this приходится использовать конструкцию use($this).Такой код рабочий, но визуально тяжёлый и избыточный. Современный PHP (начиная с версии 7.4) позволяет сделать его чище, лаконичнее и удобнее в поддержке — за счёт стрелочных функций.
Что было раньше: Классический синтаксис
Типичный старый вариант выглядит так:
ВыделитьPHP
$text = preg_replace_callback(
'/\[url(.*?)\](.*?)\[\/url\]/is',
function($match) use ($this) {
return $this->_link($match[1], $match[2]);
},
$text);Здесь три «лишних» элемента:
- Ключевое слово
function— многословно. - Явное указание
use ($this)— избыточно, потому что$thisнужен почти всегда. - Фигурные скобки и оператор
return— занимают строки, не добавляя смысла.
Это не ошибка, но в проектах с десятками подобных обработчиков такой стиль делает...
Kotlin: Как вывести данные для проверки
При написании приложения может потребоваться проверить данные, как они были обработаны. Для этого, за частую, достаточно их просто увидеть. В этом нам поможет класс Gson. Чтобы его использовать, необходимо импортировать:
Если, по каким то причинам его у вас до сих пор нет, добавляем в "build.gradle.kts":
После чего, если потребуется, пересоберите проект. И выводите нужные данные так:
В лог выводим так:
Импорт логирования:
В логе увидите строку с данными.
...
ВыделитьKotlin
import android.util.LogЕсли, по каким то причинам его у вас до сих пор нет, добавляем в "build.gradle.kts":
ВыделитьKotlin
implementation("com.google.code.gson:gson:xx.xx.xx")xx.xx.xx: Указывайте актуальную версию.
После чего, если потребуется, пересоберите проект. И выводите нужные данные так:
ВыделитьKotlin
Gson().toJson(data)В лог выводим так:
ВыделитьKotlin
Log.d("Data", Gson().toJson(data))Импорт логирования:
ВыделитьKotlin
import android.util.LogВ логе увидите строку с данными.
...
SQL: Как создать индекс
Kotlin: Стандартные индикаторы загрузки
В Jetpack Compose есть несколько стандартных индикаторов загрузки:
Примеры их использования:
Дополнительные возможности настройки:
CircularProgressIndicator: Классический круговой индикатор.LinearProgressIndicator: Линейный индикатор.ActivityIndicator: Простой вращающийся индикатор.
Примеры их использования:
ВыделитьKotlin
// Круговой индикатор
CircularProgressIndicator(
modifier = Modifier
.size(40.dp)
.padding(16.dp),
color = MaterialTheme.colorScheme.primary
)
// Линейный индикатор
LinearProgressIndicator(
progress = 0.5f, // значение от 0 до 1
modifier = Modifier
.height(4.dp)
.fillMaxWidth()
.padding(16.dp)
)
// Простой индикатор активности
ActivityIndicator(
modifier = Modifier
.size(40.dp)
.padding(16.dp),
color = MaterialTheme.colorScheme.primary
)Дополнительные возможности настройки:
- Изменение размера через модификатор
size(). - Настройка цвета через параметр
color. - Анимация прогресса для
LinearProgressIndicator. - Стилизация через темы Material
