Расскажите про функции defined и get_defined_constants
defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.
get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
#вопросы_с_собеседований
defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.
get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
#вопросы_с_собеседований
🥱14👍2
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
Зачем использовать declare(strict_types=1)
В этом туторе рассказано, что означает declare(strict_types=1), почему разработчикам PHP стоит его использовать, а почему нет, а также приведены примеры, иллюстрирующие его важность.
Эта установка обусловлена слабой динамической типизацией и растущим спросом на строго типизированные функции, который покрывают другие популярные языки, такие как Java.
В этом туторе рассказано, что означает declare(strict_types=1), почему разработчикам PHP стоит его использовать, а почему нет, а также приведены примеры, иллюстрирующие его важность.
Эта установка обусловлена слабой динамической типизацией и растущим спросом на строго типизированные функции, который покрывают другие популярные языки, такие как Java.
DEV Community
Why use declare(strict_types=1) in PHP – Fast tips
In this tutorial, we'll explore what declare(strict_types=1) means, why PHP developers should use it...
👍4🌚2
Привет, друзья! 👋
Мы готовим статью на тему: «5 признаков зависимости от программирования». Нам очень важно ваше мнение! Поделитесь своим опытом и советами, и самые интересные из них мы включим в статью.
⌛ Как вы понимаете, что программирование начинает занимать слишком много места в вашей жизни? Какие признаки вы замечаете?
🏄 Какие методы и стратегии вы используете, чтобы сохранить баланс между работой и личной жизнью?
😔 Был ли у вас опыт, когда программирование негативно влияло на ваши отношения с близкими или здоровье? Как вы справились с этим?
Ваши ответы помогут многим! Спасибо за участие!
Мы готовим статью на тему: «5 признаков зависимости от программирования». Нам очень важно ваше мнение! Поделитесь своим опытом и советами, и самые интересные из них мы включим в статью.
⌛ Как вы понимаете, что программирование начинает занимать слишком много места в вашей жизни? Какие признаки вы замечаете?
🏄 Какие методы и стратегии вы используете, чтобы сохранить баланс между работой и личной жизнью?
😔 Был ли у вас опыт, когда программирование негативно влияло на ваши отношения с близкими или здоровье? Как вы справились с этим?
Ваши ответы помогут многим! Спасибо за участие!
🥱7
FrankenPHP увеличил скорость в 13 раз в режиме cgi
FrankenPHP недавно добился 13-кратного повышения производительности после устранения основного узкого места.
✔️Версия FrankenPHP 1.2.3
бенчмарк helloworld.
cgi before (num_threads 1): ~3000 запросов/секунду
cgi before (num_threads 40): ~2000 запросов/секунду
cgi after (num_threads 1): ~40.000 запросов/секунду
cgi after(num_threads 40): ~48.000 запросов/секунду
рабочий режим (1 воркер): ~40.000 запросов/секунду
рабочий режим (40 воркеров): ~44.000 запросов/секунду
Подробнее тут и тут.
FrankenPHP недавно добился 13-кратного повышения производительности после устранения основного узкого места.
✔️Версия FrankenPHP 1.2.3
бенчмарк helloworld.
cgi before (num_threads 1): ~3000 запросов/секунду
cgi before (num_threads 40): ~2000 запросов/секунду
cgi after (num_threads 1): ~40.000 запросов/секунду
cgi after(num_threads 40): ~48.000 запросов/секунду
рабочий режим (1 воркер): ~40.000 запросов/секунду
рабочий режим (40 воркеров): ~44.000 запросов/секунду
Подробнее тут и тут.
🤔15👍2
Построение полиморфной транслируемой модели в Laravel с автозагрузкой переводов
Здесь описывается, как настроить систему перевода в Laravel, используя JSON-колонки для хранения переводов, что делает управление многоязычным контентом более эффективным.
Вместо того чтобы хранить каждый перевод в отдельной строке базы данных, можно использовать JSON-колонку, в которой все переводы для одного элемента будут храниться вместе. Это упрощает как управление данными, так и их извлечение.
Шаги по реализации:
✅Создание таблицы переводов:
Если таблица для переводов еще не существует, создается новая. В этой таблице будут храниться переводы в формате JSON, а также информация о языке перевода, типе и идентификаторе связанной модели (например, пост или продукт).
✅Запуск миграции:
Миграция применяется к базе данных, чтобы создать таблицу с нужной структурой.
✅Создание модели для переводов:
Создается модель для управления переводами. Эта модель описывает полиморфную связь с другими моделями, что позволяет использовать переводы для различных типов данных.
✅Создание трейта для перевода:
Для удобства работы с переводами создается трейт, который автоматически загружает переведенный контент в зависимости от выбранного языка. Если перевода для текущего языка нет, используется резервный перевод на языке по умолчанию.
✅Применение трейта к моделям:
Трейт добавляется к любой модели, для которой требуется поддержка перевода, например, к модели поста.
✅Добавление и получение переведенных данных:
Переводы можно добавлять и получать через методы модели. При этом учитывается текущая локаль, и если перевода для неё нет, используется перевод на языке по умолчанию.
✅Отображение переведенного контента в шаблонах:
В шаблонах Laravel (Blade) переведенный контент отображается как обычные атрибуты модели, что делает работу с многоязычным контентом простой и интуитивно понятной.
Здесь описывается, как настроить систему перевода в Laravel, используя JSON-колонки для хранения переводов, что делает управление многоязычным контентом более эффективным.
Вместо того чтобы хранить каждый перевод в отдельной строке базы данных, можно использовать JSON-колонку, в которой все переводы для одного элемента будут храниться вместе. Это упрощает как управление данными, так и их извлечение.
Шаги по реализации:
✅Создание таблицы переводов:
Если таблица для переводов еще не существует, создается новая. В этой таблице будут храниться переводы в формате JSON, а также информация о языке перевода, типе и идентификаторе связанной модели (например, пост или продукт).
✅Запуск миграции:
Миграция применяется к базе данных, чтобы создать таблицу с нужной структурой.
✅Создание модели для переводов:
Создается модель для управления переводами. Эта модель описывает полиморфную связь с другими моделями, что позволяет использовать переводы для различных типов данных.
✅Создание трейта для перевода:
Для удобства работы с переводами создается трейт, который автоматически загружает переведенный контент в зависимости от выбранного языка. Если перевода для текущего языка нет, используется резервный перевод на языке по умолчанию.
✅Применение трейта к моделям:
Трейт добавляется к любой модели, для которой требуется поддержка перевода, например, к модели поста.
✅Добавление и получение переведенных данных:
Переводы можно добавлять и получать через методы модели. При этом учитывается текущая локаль, и если перевода для неё нет, используется перевод на языке по умолчанию.
✅Отображение переведенного контента в шаблонах:
В шаблонах Laravel (Blade) переведенный контент отображается как обычные атрибуты модели, что делает работу с многоязычным контентом простой и интуитивно понятной.
DEV Community
Building a Polymorphic Translatable Model in Laravel with Autoloaded Translations
When handling multilingual content, it’s often more efficient to store translations in a JSON column...
🥱3🤔1😢1
Повышаем читаемость Symfony DI
Разработчик, работающий с Symfony, делится опытомhttps://habr.com/ru/articles/833134/ создания приложений и рассказывает о проблемах, с которыми он столкнулся при использовании Symfony DI. Он также делится советами, которые, по его мнению, будут полезны при разработке крупных приложений.
Разработчик, работающий с Symfony, делится опытомhttps://habr.com/ru/articles/833134/ создания приложений и рассказывает о проблемах, с которыми он столкнулся при использовании Symfony DI. Он также делится советами, которые, по его мнению, будут полезны при разработке крупных приложений.
Хабр
Повышаем читаемость Symfony DI
Привет! Я разрабатываю приложения на Symfony и хочу поделиться проблемами, с которыми сталкивался при использовании Symfony DI, а также дать несколько советов которые, как мне кажется, будут полезны...
👍6🥱4🔥1
AI Tool Bridge
Основной проблемой при интеграции ИИ в любой проект является управление взаимодействием между ИИ и остальной частью вашего приложения. Это становится особенно сложным, когда ИИ необходимо выполнять вызовы API для получения информации или инициирования действий.
AI Tool Bridge для PHP элегантно решает эту проблему, предлагая простой интерфейс для определения «инструментальных функций», которые ИИ может использовать, когда ему необходимо взаимодействовать с внешними системами.
Важной оптимизацией является способность библиотеки генерировать необходимую структуру JSON для функционирования инструмента. Он делает это, запрашивая у ИИ только необходимые значения, а затем генерируя JSON на основе предоставленной схемы JSON. Такой подход гарантирует достоверность окончательного JSON, который достигает кода вашего приложения.
Ключевые особенности этой библиотеки включают в себя:
✅Облегчение определения инструментов, которые ИИ может использовать для внешних взаимодействий.
✅Предоставление надежной структуры подсказок, чтобы подсказывать ИИ, когда и как использовать эти инструменты.
✅Обеспечение запуска инструментов с полным и правильно отформатированным JSON.
Основной проблемой при интеграции ИИ в любой проект является управление взаимодействием между ИИ и остальной частью вашего приложения. Это становится особенно сложным, когда ИИ необходимо выполнять вызовы API для получения информации или инициирования действий.
AI Tool Bridge для PHP элегантно решает эту проблему, предлагая простой интерфейс для определения «инструментальных функций», которые ИИ может использовать, когда ему необходимо взаимодействовать с внешними системами.
Важной оптимизацией является способность библиотеки генерировать необходимую структуру JSON для функционирования инструмента. Он делает это, запрашивая у ИИ только необходимые значения, а затем генерируя JSON на основе предоставленной схемы JSON. Такой подход гарантирует достоверность окончательного JSON, который достигает кода вашего приложения.
Ключевые особенности этой библиотеки включают в себя:
✅Облегчение определения инструментов, которые ИИ может использовать для внешних взаимодействий.
✅Предоставление надежной структуры подсказок, чтобы подсказывать ИИ, когда и как использовать эти инструменты.
✅Обеспечение запуска инструментов с полным и правильно отформатированным JSON.
GitHub
GitHub - manuelkiessling/php-ai-tool-bridge: Seamlessly empower your AI integration to interact with your own code and services
Seamlessly empower your AI integration to interact with your own code and services - manuelkiessling/php-ai-tool-bridge
👍3🔥2
Какой подход следует применить во время тестирования кода, который имеет внешние зависимости?
Один из подходов, который может быть применен во время тестирования кода с внешними зависимостями, — это использование моков или заглушек (mocks или stubs).
Использование моков и заглушек позволяет изолировать код от внешних зависимостей и создавать контролируемые ситуации для тестирования. Это значительно упрощает написание тестовых сценариев и позволяет проверить правильность работы кода без необходимости подключения к реальным сервисам или захвата ресурсов. Они также позволяют создавать тестовые сценарии, которые воспроизводят различные сценарии, которые могут быть сложными или невозможными в реальной системе.
#вопросы_с_собеседований
Один из подходов, который может быть применен во время тестирования кода с внешними зависимостями, — это использование моков или заглушек (mocks или stubs).
Использование моков и заглушек позволяет изолировать код от внешних зависимостей и создавать контролируемые ситуации для тестирования. Это значительно упрощает написание тестовых сценариев и позволяет проверить правильность работы кода без необходимости подключения к реальным сервисам или захвата ресурсов. Они также позволяют создавать тестовые сценарии, которые воспроизводят различные сценарии, которые могут быть сложными или невозможными в реальной системе.
#вопросы_с_собеседований
👍4
Как промежуточное ПО TrimStrings в Laravel может вызывать проблемы
Что такое TrimStrings Middleware и для чего оно нужно?
TrimStrings — это middleware в Laravel, которое автоматически удаляет пробелы в начале и в конце строк данных, поступающих в запросах. Например, если пользователь вводит в форму " [email protected] " с пробелами, middleware уберёт эти пробелы и передаст чистую строку «[email protected]». Это помогает избежать ошибок, вызванных лишними пробелами.
Что произошло?
При интеграции с бразильским платёжным провайдером возникла необходимость валидации данных о транзакциях, поступающих на сервер через POST-запрос. Для проверки подлинности данных выполняется хэширование строки с использованием алгоритма SHA256 и секретного ключа. Однако в процессе проверки некоторые корректные запросы отклонялись.
Анализ логов Nginx показал, что в параметре full_name от провайдера сохранялись конечные пробелы, которые на сервере обрезались TrimStrings middleware. Это приводило к несоответствию хэшей и отклонению запросов.
Как решить проблему?
Для предотвращения подобных ситуаций нужно отключить TrimStrings middleware для определённых маршрутов. В Laravel 8 для этого появился метод TrimStrings::skipWhen.
Что такое TrimStrings Middleware и для чего оно нужно?
TrimStrings — это middleware в Laravel, которое автоматически удаляет пробелы в начале и в конце строк данных, поступающих в запросах. Например, если пользователь вводит в форму " [email protected] " с пробелами, middleware уберёт эти пробелы и передаст чистую строку «[email protected]». Это помогает избежать ошибок, вызванных лишними пробелами.
Что произошло?
При интеграции с бразильским платёжным провайдером возникла необходимость валидации данных о транзакциях, поступающих на сервер через POST-запрос. Для проверки подлинности данных выполняется хэширование строки с использованием алгоритма SHA256 и секретного ключа. Однако в процессе проверки некоторые корректные запросы отклонялись.
Анализ логов Nginx показал, что в параметре full_name от провайдера сохранялись конечные пробелы, которые на сервере обрезались TrimStrings middleware. Это приводило к несоответствию хэшей и отклонению запросов.
Как решить проблему?
Для предотвращения подобных ситуаций нужно отключить TrimStrings middleware для определённых маршрутов. В Laravel 8 для этого появился метод TrimStrings::skipWhen.
DEV Community
How Laravel's TrimStrings Middleware Can Cause Issues
Laravel is a popular framework in the PHP world, offering developers great tools to simplify their...
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🎉1
Действительно ли класс DateTime в PHP настолько плох?
Здесь мы рассмотрим плюсы и минусы класса DateTime, важность неизменяемости и то, как эффективно использовать класс DateTime, проанализируем причины и последствия, стоящие за этими проблемами.
Здесь мы рассмотрим плюсы и минусы класса DateTime, важность неизменяемости и то, как эффективно использовать класс DateTime, проанализируем причины и последствия, стоящие за этими проблемами.
DEV Community
Is PHP’s DateTime Class Really That Bad?
In the PHP developer community, the DateTime class has long been a topic of controversy. For many...
🎉2👍1
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #phpdevjob
Вакансии PHP разработчиков уровня Junior
▪️PHP разработчик
Удаленка. Social Media Holding — технологические IT- проекты
Подробнее
▪️Веб-программист
Санкт-Петербург. Информатика и Сервис — системный интегратор и разработчик
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP Разработчик
Удаленка. Digital Services — разработка проектов в области кибербезопасности
Подробнее
▪️PHP Developer
Удаленка. Максимал — разработка сайтов любой сложности
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Backend-разработчик
Москва. Present&Simple — бренд женской одежды
Подробнее
▪️PHP-разработчик
Удаленка. Fix Price. IT — международная торговая розничная сеть
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️PHP разработчик
Удаленка. Social Media Holding — технологические IT- проекты
Подробнее
▪️Веб-программист
Санкт-Петербург. Информатика и Сервис — системный интегратор и разработчик
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP Разработчик
Удаленка. Digital Services — разработка проектов в области кибербезопасности
Подробнее
▪️PHP Developer
Удаленка. Максимал — разработка сайтов любой сложности
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Backend-разработчик
Москва. Present&Simple — бренд женской одежды
Подробнее
▪️PHP-разработчик
Удаленка. Fix Price. IT — международная торговая розничная сеть
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
❤5👍1🤔1
В чем разница между методами dd() и dump()?
В Laravel методы dd() и dump() используются для вывода отладочной информации, но между ними есть некоторые различия:
Метод dd() (Dump and Die):
dd() расшифровывается как «Dump and Die».
Он выводит отладочную информацию и сразу завершает выполнение скрипта. Это удобно, когда нужно быстро остановить выполнение программы и просмотреть значения переменных или других данных.
Пример использования:
Метод dump():
dump() просто выводит отладочную информацию, но не останавливает выполнение скрипта. Это полезно, когда нужно просмотреть данные на разных этапах выполнения программы, не прерывая её работу.
Пример использования:
Таким образом, основное отличие заключается в том, что dd() завершает выполнение программы, а dump() — нет.
#вопросы_с_собеседований
В Laravel методы dd() и dump() используются для вывода отладочной информации, но между ними есть некоторые различия:
Метод dd() (Dump and Die):
dd() расшифровывается как «Dump and Die».
Он выводит отладочную информацию и сразу завершает выполнение скрипта. Это удобно, когда нужно быстро остановить выполнение программы и просмотреть значения переменных или других данных.
Пример использования:
$data = [1, 2, 3];
dd($data);
// Выведет содержимое переменной $data и остановит выполнение скрипта.
Метод dump():
dump() просто выводит отладочную информацию, но не останавливает выполнение скрипта. Это полезно, когда нужно просмотреть данные на разных этапах выполнения программы, не прерывая её работу.
Пример использования:
$data = [1, 2, 3];
dump($data);
// Выведет содержимое переменной $data, но скрипт продолжит выполнение.
Таким образом, основное отличие заключается в том, что dd() завершает выполнение программы, а dump() — нет.
#вопросы_с_собеседований
👍6😁5
CSV и PHP8.4+
Здесь обсуждаются изменения в PHP 8.4, касающиеся обработки CSV-файлов, и их влияние на разработчиков и библиотеку league/csv, которая является популярным инструментом для работы с CSV в PHP.
В новой версии PHP 8.4 будут введены новые функции, такие как асимметричная видимость и хуки для свойств, но также будут изменения в старых функциональностях, в частности, в обработке CSV.
Разработчикам рекомендуется обновить свой код, чтобы использовать пустую строку для параметра экранирования и избежать предупреждений о депрекации. В статье приводятся примеры кода с пояснениями, как это сделать.
Здесь обсуждаются изменения в PHP 8.4, касающиеся обработки CSV-файлов, и их влияние на разработчиков и библиотеку league/csv, которая является популярным инструментом для работы с CSV в PHP.
В новой версии PHP 8.4 будут введены новые функции, такие как асимметричная видимость и хуки для свойств, но также будут изменения в старых функциональностях, в частности, в обработке CSV.
Разработчикам рекомендуется обновить свой код, чтобы использовать пустую строку для параметра экранирования и избежать предупреждений о депрекации. В статье приводятся примеры кода с пояснениями, как это сделать.
👍6🎉3🔥1👏1