Что следует избегать в JavaScript
Даже опытные разработчики иногда совершают ошибки, которые ведут к багам, уязвимостям и странному поведению.
В статье — список распространённых антипаттернов, которых лучше избегать:
🚫
🚫
🚫
🚫
🚫 Функции с 6 аргументами подряд
…и другие ловушки, в которые попадали почти все.
🔎 Это не догмы, а практичные советы, основанные на реальных граблях.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #tips #антипаттерны #советы
Даже опытные разработчики иногда совершают ошибки, которые ведут к багам, уязвимостям и странному поведению.
В статье — список распространённых антипаттернов, которых лучше избегать:
🚫
innerHTML вместо textContent🚫
JSON.stringify() для сравнения объектов🚫
== вместо ===🚫
eval() и var🚫 Функции с 6 аргументами подряд
…и другие ловушки, в которые попадали почти все.
🔎 Это не догмы, а практичные советы, основанные на реальных граблях.
#JavaScript #tips #антипаттерны #советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
- Зачем нужно знать, реализацию быстрой сортировки?
- Чтобы пройти собеседования.
- А потом?
- Проводить собеседования других людей.
📱 @dev_notes_ru
#joke
- Чтобы пройти собеседования.
- А потом?
- Проводить собеседования других людей.
#joke
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣5🔥4
🔥 Все ещё используете
Признайтесь , иногда просто хочется получить данные, а не писать эссе на PHP.
Чисто? Не совсем.
Laravel хелпер
Если появляется ошибка, Laravel тихо обрабатывает исключение и продолжает работу.
Нужен резервный вариант?
Хотите получить выборочный отчет?
— Без повторяющихся
— Опциональная отчетность об ошибках
— Более чистый и безопасный код
Итог:
Ведь иногда одной строки бывает достаточно.
👩💻 Хелпер `rescue()`
📱 @dev_notes_ru
#Laravel #Laravel12
try-catch для мелких задач?Признайтесь , иногда просто хочется получить данные, а не писать эссе на PHP.
try {
$post = Post::findOrFail($id);
} catch (ModelNotFoundException $e) {
report($e);
$post = null;
}Чисто? Не совсем.
Laravel хелпер
rescue() делает это одной строкой:$post = rescue(fn() => Post::findOrFail($id));
Если появляется ошибка, Laravel тихо обрабатывает исключение и продолжает работу.
Нужен резервный вариант?
$post = rescue(
fn() => Post::findOrFail(999),
new Post(['title' => 'Untitled'])
);
Хотите получить выборочный отчет?
$data = rescue(
fn() => Http::get('https://api.example.com')->json(),
[],
report: fn($e) => $e instanceof ConnectionException
);
— Без повторяющихся
try-catch— Опциональная отчетность об ошибках
— Более чистый и безопасный код
Итог:
rescue() делает код кратким и понятным — идеально подходит для небольших, отказоустойчивых операций.Ведь иногда одной строки бывает достаточно.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
rescue()Функция
rescue выполняет заданное замыкание и перехватывает все исключения, возникающие во время его выполнения. Все перехваченные исключения будут отправлены в ваш обработчик исключений, однако обработка запроса будет продолжена:return rescue(function () {
return $this->method();
});Вы также можете передать второй аргумент в функцию
rescue. Этот аргумент будет "значением по умолчанию", возвращаемым в случае возникновения исключения при выполнении замыкания:return rescue(function () {
return $this->method();
}, false);
return rescue(function () {
return $this->method();
}, function () {
return $this->failure();
});Аргумент
report может быть передан функции rescue для определения того, следует ли сообщать об исключении с помощью функции report:return rescue(function () {
return $this->method();
}, report: function (Throwable $throwable) {
return $throwable instanceof InvalidArgumentException;
});#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2❤1
🚀 Laravel:
Иногда в коде необходимо проверить не то, чем начинается или заканчивается строка, а то, чем она не начинается и не заканчивается.
С помощью новейших строковых хелперов Laravel можно обойтись без неудобных отрицаний и писать условия, которые читаются как обычный текст.
🔧 Пример:
✅ Почему это важно
— Код становится более читабельным (больше нет
— Ясно выражает намерение: проверяется, чем строка не начинается и чем не заканчивается
— Такая же гибкость, как у
💡 Используйте эти хелперы при проверке исключающих правил: заблокированных префиксов, запрещенных суффиксов или любых негативных условий в логике строк.
📱 @dev_notes_ru
#Laravel #Laravel12
Str::doesntStartWith() и Str::doesntEndWith() — более чистые проверки строк на отрицательные условияИногда в коде необходимо проверить не то, чем начинается или заканчивается строка, а то, чем она не начинается и не заканчивается.
С помощью новейших строковых хелперов Laravel можно обойтись без неудобных отрицаний и писать условия, которые читаются как обычный текст.
🔧 Пример:
use Illuminate\Support\Str;
if (Str::doesntStartWith($username, ['admin_', 'sys_'])) {
// $username НЕ начинается с этих префиксов
}
if (Str::doesntEndWith($filename, ['.tmp', '.bak'])) {
// Имя файла $filename НЕ заканчивается на .tmp или .bak
}
✅ Почему это важно
— Код становится более читабельным (больше нет
!Str::startsWith())— Ясно выражает намерение: проверяется, чем строка не начинается и чем не заканчивается
— Такая же гибкость, как у
startsWith()/endsWith() — принимают как одиночные значения, так и массивы💡 Используйте эти хелперы при проверке исключающих правил: заблокированных префиксов, запрещенных суффиксов или любых негативных условий в логике строк.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👎2
🧩 Laravel 12.x: Fluent теперь использует
Если вам нравится работать с классом
Теперь можно проверить, пуст ли экземпляр
🔧 Пример
💡 Почему это классно
— Быстрый способ проверки пустых объектов
— Более чистый способ, чем ручная проверка
— Полезно при работе с динамической конфигурацией, ответами API или DTO.
Небольшое улучшение, но оно делает
📱 @dev_notes_ru
#Laravel #Laravel12 #Fluent
isEmpty()Если вам нравится работать с классом
Fluent в Laravel, то понравится это небольшое обновление.Теперь можно проверить, пуст ли экземпляр
Fluent, с помощью нового метода isEmpty().🔧 Пример
use Illuminate\Support\Fluent;
$fluent = new Fluent(['name' => 'Taylor']);
$fluent->isEmpty(); // false
$empty = new Fluent();
$empty->isEmpty(); // true
💡 Почему это классно
— Быстрый способ проверки пустых объектов
Fluent.— Более чистый способ, чем ручная проверка
count() или преобразование в массивы.— Полезно при работе с динамической конфигурацией, ответами API или DTO.
Небольшое улучшение, но оно делает
Fluent еще более... плавным.#Laravel #Laravel12 #Fluent
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
В конце года выходит PHP 8.5, и он приносит множество интересных обновлений:
— оператор конвейера
|>—
array_first() и array_last()— атрибут
#[\NoDiscard]— улучшения
cURL, Directory, трассировки ошибок— и даже замыкания в константах!
#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 Совет по Laravel: автоматическое переключение
Устали от жонглирования разными
Laravel поддерживает эту функцию — без хаков и изменений в
💻 Local (Valet / macOS)
1️⃣ Создайте файл
Valet автоматически обнаружит и использует его без дополнительной настройки.
Если не используете Valet, просто выполните:
Это укажет Laravel явно загрузить файл
🚀 Продакшен (Nginx)
На сервере создайте файл
Укажите Nginx использовать его:
Затем перезагрузите:
✅ Результат
— Локальная версия работает с
— Продакшен работает с
— Переключение происходит автоматически через
💡 Чисто и без лишних сложностей. Laravel сам всё сделает.
📱 @dev_notes_ru
#Laravel #Laravel12
.env для локальной разработки и продакшенаУстали от жонглирования разными
.env файлами между локальной средой и продакшеном?Laravel поддерживает эту функцию — без хаков и изменений в
bootstrap/app.php.💻 Local (Valet / macOS)
1️⃣ Создайте файл
.env.local:APP_ENV=local
APP_DEBUG=true
DB_DATABASE=your_local_db
Valet автоматически обнаружит и использует его без дополнительной настройки.
Если не используете Valet, просто выполните:
export APP_ENV=local && php artisan optimize
Это укажет Laravel явно загрузить файл
.env.local.🚀 Продакшен (Nginx)
На сервере создайте файл
.env.prod:APP_ENV=prod
APP_DEBUG=false
DB_DATABASE=your_prod_db
Укажите Nginx использовать его:
fastcgi_param APP_ENV prod;
Затем перезагрузите:
sudo service nginx reload
php artisan config:clear
php artisan cache:clear
✅ Результат
— Локальная версия работает с
.env.local.— Продакшен работает с
.env.prod.— Переключение происходит автоматически через
APP_ENV.💡 Чисто и без лишних сложностей. Laravel сам всё сделает.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Полное руководство по установке и обновлению PHP 8.5 в Ubuntu и Debian: подключение репозитория Ondřej, установка PHP-FPM и расширений, миграция конфигурации, удаление старых версий и работа нескольких версий PHP одновременно.
#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 PHP 8.5: что нового в сообщениях об ошибках
В PHP 8.5 появилось 265 новых сообщений об ошибках — строже типы, аккуратнее синтаксис, больше прозрачности при выполнении кода.
Мы разобрали самые частые из них:
— «
— ограничения pipe-оператора
— устаревшее использование
— неканонические приведения типов (
— замена
— ошибка при атрибутах в глобальных константах
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85
В PHP 8.5 появилось 265 новых сообщений об ошибках — строже типы, аккуратнее синтаксис, больше прозрачности при выполнении кода.
Мы разобрали самые частые из них:
— «
syntax error, unexpected token “>”»— ограничения pipe-оператора
|>— устаревшее использование
null как индекса массива— неканонические приведения типов (
(integer), (boolean))— замена
$http_response_header на http_get_last_response_headers()— ошибка при атрибутах в глобальных константах
#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
|>)В PHP 8.5 появился новый оператор pipe, который позволяет передавать результат одного вызова в следующий по цепочке — без вложенности и временных переменных.
$result = "Hello World"
|> strtoupper(...)
|> str_shuffle(...)
|> trim(...);
Оператор конвейера pipe работает с любыми
callable: функциями, методами, замыканиями, объектами с __invoke.Но есть ограничения:
@prefer-ref), void — дальше передаётся null.Pipe не добавляет новых возможностей, но делает цепочки преобразований более читаемыми и функциональными по стилю.
#PHP #PHP85 #pipe
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
⚙️ PHP 8.5: новое поведение Filter — теперь с исключениями
В PHP 8.5 появилось важное обновление в работе
Больше никаких false и ручных проверок — валидация стала проще, предсказуемее и удобнее при работе с внешними данными. Полезно для API, CLI-инструментов и всего, где входящие данные критичны.
Коротко, что изменилось:
— новый флаг
— подробные сообщения об ошибках;
— работает для всех
— не совместим с
— не влияет на
⚡️ Отличное обновление, которое делает обработку ошибок намного чище.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #Filter
В PHP 8.5 появилось важное обновление в работе
filter_*: теперь при провале валидации можно выбрасывать исключения с помощью нового флага FILTER_THROW_ON_FAILURE.Больше никаких false и ручных проверок — валидация стала проще, предсказуемее и удобнее при работе с внешними данными. Полезно для API, CLI-инструментов и всего, где входящие данные критичны.
Коротко, что изменилось:
— новый флаг
FILTER_THROW_ON_FAILURE;— подробные сообщения об ошибках;
— работает для всех
FILTER_VALIDATE_*;— не совместим с
FILTER_NULL_ON_FAILURE;— не влияет на
FILTER_CALLBACK, но callback может бросать исключение сам.⚡️ Отличное обновление, которое делает обработку ошибок намного чище.
#PHP #PHP85 #Filter
Please open Telegram to view this post
VIEW IN TELEGRAM
max_memory_limitВ PHP 8.5 появилась новая INI-директива
max_memory_limit, которая задаёт верхний предел для memory_limit. Теперь администратор может запретить скрипту увеличивать лимит памяти выше установленного значения — даже через ini_set().— защита от неконтролируемого роста потребления памяти;
— удобный потолок для продакшена, Docker и shared-hosting;
— предсказуемое поведение конфигурации.
Если
memory_limit пытаются поставить выше max_memory_limit или отключить (-1), PHP выдаёт предупреждение и оставляет максимально разрешённое значение.#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 PHP 8.5 получает новую Curl-функцию —
В свежем релизе PHP 8.5 расширение Curl обзавелось полезным обновлением: теперь можно напрямую получить список всех
Функция упрощает работу с множественными curl-запросами и делает мульти-обработку предсказуемее и удобнее.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #cURL
curl_multi_get_handlesВ свежем релизе PHP 8.5 расширение Curl обзавелось полезным обновлением: теперь можно напрямую получить список всех
CurlHandle, добавленных в CurlMultiHandle. Раньше для этого приходилось вручную вести массивы или использовать WeakMap.Функция упрощает работу с множественными curl-запросами и делает мульти-обработку предсказуемее и удобнее.
#PHP #PHP85 #cURL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
IntlListFormatterРасширение
Intl в PHP 8.5 добавляет новый класс IntlListFormatter. Он обеспечивает форматирование списков с учётом локализации в удобные для чтения списки "и"-списки, "или"-списки или единицы.Новый класс
IntlListFormatter следует тем же шаблонам, что и другие классы из расширения Intl; он создаётся с помощью валидной строки локали и использует данные ICU для фактического форматирования.#PHP #PHP85 #Intl
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.5: CLI:
В PHP 8.5 появилась полезная команда для отладки конфигурации —
🛠 Как это работает:
На выходе — список параметров, которые вы или система изменили:
🚀 Зачем это нужно:
✅ Больше не нужно вручную сравнивать
✅ Идеально для отчётов об ошибках — сразу видно, какие настройки могли вызвать проблему
✅ Работает в связке с другими CLI-опциями (
🔙 Обратная совместимость:
В старых версиях PHP команда не сломается — просто вернёт результат как
Отличный инструмент для всех, кто работает с настройкой PHP-серверов и отладкой окружения.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #CLI
php --ini=diff отображает нестандартные INI директивыВ PHP 8.5 появилась полезная команда для отладки конфигурации —
php --ini=diff. Она моментально показывает все INI-настройки, которые отличаются от стандартных значений по умолчанию.🛠 Как это работает:
php --ini=diff
На выходе — список параметров, которые вы или система изменили:
Non-default INI settings:
html_errors: "1" -> "0"
max_execution_time: "30" -> "0"
php.ini или искать изменения в phpinfo()-d, -c, -n)🔙 Обратная совместимость:
В старых версиях PHP команда не сломается — просто вернёт результат как
php --ini.Отличный инструмент для всех, кто работает с настройкой PHP-серверов и отладкой окружения.
#PHP #PHP85 #CLI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
PHP 8.5: новая функция
В PHP 8.5 появилось обновление для работы с многоязычными приложениями: функция
Эти инструменты значительно упрощают локализацию приложений и обеспечивают корректное отображение текста на языках с RTL написанием.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #Intl #Locale
locale_is_right_to_left и метод Locale::isRightToLeftВ PHP 8.5 появилось обновление для работы с многоязычными приложениями: функция
locale_is_right_to_left и метод Locale::isRightToLeft, позволяющие разработчикам автоматически определять языки с написанием справа налево, включая арабский и иврит. Эти инструменты значительно упрощают локализацию приложений и обеспечивают корректное отображение текста на языках с RTL написанием.
#PHP #PHP85 #Intl #Locale
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1