Telegram Web
Стоит ли возвращать null из методов. Если нет, то почему и как писать код в таких случаях?

Когда речь идет о возвращении значения из методов, лучше избегать возвращения null, так как это может привести к ошибкам и сложностям при обработке результата функции. Вместо этого, важно возвращать объекты или значения-заглушки, которые явно указывают на определенное состояние или ситуацию.

Если метод не может вернуть ожидаемый результат или найти запрошенное значение, то лучше выбросить исключение, чтобы проинформировать о такой ситуации и позволить соответствующей обработке ошибок или выполнению альтернативных действий. Если метод не может найти результат, который можно обозначить специальным значением, можно вернуть значение-заглушку, которое явно указывает на отсутствие результата или ошибку. Это может быть пустой массив, пустой объект, пустая строка или целое число, имеющее конкретное значение, которое в вашем контексте обозначает отсутствие результата.
👍8👾4
Composer: бинарные образы Docker

Разработчик предложил создать новую версию Docker-образов для Composer, содержащую только бинарный файл Composer, что позволяет оптимизировать пространство и ресурсы. Идея была в том, чтобы избежать загрузки полного образа Composer (около 190 МБ), если требуется только сам бинарный файл (около 2,5 МБ). Его Pull Request был принят, и теперь пользователи могут использовать компактные, бинарные образы Composer в своих сборках Docker.

Особенности новой реализации:

Чтобы использовать бинарный образ, необходимо указать composer/composer и добавить суффикс -bin. Также изменено расположение бинарного файла: теперь он находится в корневом каталоге (/composer) вместо стандартного (/usr/bin/composer).

Пример использования:
FROM php:8-alpine
COPY --from=composer/composer:2-bin /composer /usr/bin/composer


Новый подход подходит для создания кастомных образов на базе PHP с Composer, где можно просто скопировать готовый бинарный файл, избегая программной установки.

Важно отметить, что эти образы содержат только бинарный файл Composer и не подходят для выполнения команд, так как в них нет ни PHP-окружения, ни оболочки.

Технические детали реализации:

Автор добавил новые цели сборки в Dockerfile, что позволило создавать как полноценные, так и бинарные образы. Для этого был применен метод многоэтапной сборки, оптимизирующий конечный образ и исключающий временные файлы. Также в GitHub Actions были настроены новые этапы для сборки и тестирования обоих типов образов.
17👍1
🔐 🔑 OAuth 2: как работает современная авторизация

Помнишь кнопку «Войти через Google»? Та самая кнопка, которая избавляет от необходимости запоминать очередной пароль. Сегодня разберем, как работает эта магия изнутри, почему гиганты вроде Spotify и Medium используют такой способ входа, и как внедрить его в свое приложение. Спойлер: это проще, чем кажется, и гораздо безопаснее традиционной формы регистрации.

Читать статью
🤔4🤩3
Fizz-Buzz за 56 символов?

На сайте code-golf.io вы можете посоревноваться в написании самых коротких решений простых задач по программированию. Например, попробуйте написать самый короткий код FizzBuzz на PHP — на данный момент он составляет всего 56 символов!

Задача состоит в следующем:

🔸Напечатайте числа от 1 до 100 включительно, каждое на своей строке.

🔸Если, однако, число кратно трем, то вместо него выведите Fizz, а если число кратно пяти, то выведите Buzz.

🔸Если верно несколько условий, то должны быть выведены все замены, например 15 — FizzBuzz.

Вот пример на 72 символа:

for(;$i++<100;)echo$i%15?($i%3?($i%5?$i:'Buzz'):'Fizz'):'FizzBuzz',"\n»;
4👍2👏1😁1
Новое в Symfony 7.2

🔸Улучшена работа с тайм-аутами в компоненте Messenger для предотвращения повторной обработки сообщений. Это реализовано двумя новыми функциями:

Поддержка keepalive: введен интерфейс KeepaliveReceiverInterface, который позволяет транспортам оповещать о том, что сообщение все еще обрабатывается, избегая его возврата в очередь. Метод keepalive(Envelope $envelope): void отправляет уведомление о том, что сообщение активно, предотвращая тайм-аут на стороне транспорта. Несколько встроенных транспортов уже реализуют этот интерфейс, и поддержка будет расширена в будущих версиях Symfony.

ConsoleAlarmEvent и SIGALRM-сигнал: добавлен метод setAlarmInterval в основной класс приложений Symfony для установки интервала сигнала SIGALRM. Команды messenger:consume и messenger:failed:retry теперь поддерживают опцию --keepalive, которая позволяет периодически вызывать keepalive с помощью SIGALRM сигнала.

🔸Компонент Mime получил два важных нововведения:

Пользовательские MIME-энкодеры: раньше Mime-компонент поддерживал только фиксированные типы энкодеров для элементов TextPart (quoted-printable, base64, 8bit). Теперь разработчики могут создавать и использовать собственные энкодеры для специфических нужд, таких как SOAP-вложения.

Поддержка Unicode в email-адресах: благодаря поддержке стандарта RFC 6531 теперь можно использовать Unicode-символы в email-адресах (в локальной и доменной частях).

🔸Добавлена возможность настраивать индикатор завершения в компоненте Console, что улучшает удобство работы и взаимодействие с разработчиком (DX). Ранее при использовании индикатора прогресса отображался вращающийся текстовый спиннер, который оставался на последнем состоянии при завершении команды, что могло создавать неконсистентное впечатление.

Теперь по умолчанию отображается значок ✔️ как индикатор завершения, обеспечивая единообразное завершение. Также можно задать собственное значение индикатора завершения с помощью опции finishedIndicatorValue.
🔥51
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Dead code detector

Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
👍8
Что может содержать интерфейс?

В PHP интерфейс является объявлением, которое определяет список методов, которые должны быть реализованы классами, которые реализуют этот интерфейс. Интерфейс не содержит реализации методов, он просто указывает, какие методы должны быть доступны в классе.

Интерфейс может содержать следующие элементы:

Объявления методов: Это основной компонент интерфейса. Методы в интерфейсе объявляются без тела функции, то есть без реализации.

Константы: Интерфейс также может содержать константы, которые автоматически являются публичными, статическими и неизменяемыми (final).

Наследование интерфейсов: Интерфейсы могут наследовать другие интерфейсы, что позволяет создавать иерархии интерфейсов.

Интерфейсы могут быть пустыми: Интерфейс может быть пустым, то есть не содержать ни одного метода. Это полезно в случае, если вы хотите убедиться, что класс реализует определенный интерфейс, но не требует реализации каких-либо конкретных методов.

Интерфейсы в PHP предоставляют гибкую и мощную возможность для определения контрактов между различными частями кода и обеспечивают возможность полиморфного поведения, что способствует упрощению и улучшению структуры вашего приложения.

#вопросы_с_собеседований
👍6
Все атрибуты Laravel PHP

Атрибуты позволяют добавлять метаданные к классам, методам и свойствам, что упрощает и структурирует разработку. Laravel предоставляет набор встроенных атрибутов, которые можно применять для различных задач.

ObservedBy
Атрибут ObservedBy назначает наблюдателя для модели, что помогает вынести логику наблюдателей в отдельный класс, делая модель проще и чище. Например, можно связать модель User с наблюдателем UserObserver.

ScopedBy
С помощью атрибута ScopedBy можно задать глобальную область видимости для модели. Это полезно для применения стандартных ограничений запроса ко всем операциям с моделью. Например, можно добавить фильтр на активных пользователей, используя глобальный скоуп ActiveScope.

Контекстные атрибуты
Laravel поддерживает удобный способ внедрения зависимости в определённом контексте, используя специальные атрибуты. Вместо настройки привязок в провайдерах, можно внедрить атрибуты для конкретных контекстов, например, внедрить Auth, Cache, Config, DB, Log и Tag в контроллер. Также Laravel позволяет внедрить текущего пользователя в маршрут с помощью атрибута CurrentUser.

DeleteWhenMissingModels
Этот атрибут автоматически удаляет задание из очереди, если нужная модель отсутствует в базе данных. Например, задание ProcessPodcastJob удалится, если модель Podcast не найдена.

WithoutRelations
WithoutRelations позволяет загрузить модель без её связей, что бывает полезно для экономии ресурсов, если связи не требуются.

Custom Eloquent Collections
При работе с запросами к модели, Eloquent возвращает коллекцию через базовый класс Collection. Если нужно использовать собственный класс коллекций с дополнительными методами, это можно сделать с помощью атрибута CollectedBy.
👍5
Статистика Laravel в 2024

Сегодня Laravel используют более 1,7 млн сайтов, из которых более 743 тысяч — действующие. Это делает его ведущим фреймворком в PHP-среде. Около 44 тысяч компаний применяют его для своих проектов, включая известные бренды, такие как Pfizer и BBC. Фреймворк популярен в основном в США, где Laravel применяют свыше 300 тысяч сайтов.

Статистика популярности Laravel
Laravel занимает 35,87% рынка PHP-фреймворков, опережая Yii и CodeIgniter.
Годовой доход компании достигает $5,7 млн благодаря платным продуктам, таким как Laravel Forge и Laracasts.

Laravel и индустрии
Основные отрасли, где используется Laravel, — это компьютерные и электронные технологии, наука, образование, а также веб-разработка. Фреймворк популярен в США, Великобритании и России, и, по данным BuiltWith, 5,32% всех сайтов, использующих Laravel, относятся к технологическому сектору.

👉Полная стата по ссылке
👍15🔥1
Привет, друзья! 👋

Мы готовим статью о том, как эффективно изучать программирование, и хотим услышать ваше мнение! 🤓💻 Поделитесь своим опытом, и самые полезные советы войдут в нашу публикацию.
3
⚒️ Фундаментальные основы Redis: на заметку разработчику

👉 Источник
3🥱1
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
👍2
Построение устойчивой и масштабируемой архитектуры

В основе такой архитектуры заложены принципы, позволяющие масштабировать систему и автоматически справляться с неполадками.

Что такое масштабируемость и устойчивость

Масштабируемость позволяет системе выдерживать высокие нагрузки и распределять их без сбоев. Устойчивость означает способность системы к самовосстановлению при сбоях, без потери данных и с минимальным вмешательством разработчиков. Эти качества можно достичь за счёт изоляции процессов: обрабатывая каждую задачу отдельно, можно быстро масштабировать обработку и выполнять только те операции, которые действительно необходимы.

Сообщения как основа архитектуры

Архитектуры, основанные на передаче сообщений, помогают строить системы, устойчивые к сбоям и готовые к масштабированию. Однако такие архитектуры добавляют сложности в разработку, так как требуют значительной настройки и большого объёма шаблонного кода. Без упрощений это может снижать скорость работы над основными задачами и даже вызывать у разработчиков неудовлетворённость.

Ориентация на бизнес-логику

Чтобы облегчить задачу разработчикам и сделать архитектуру полезной в повседневной работе, представлена концепция «Бизнес-ориентированной архитектуры». Её задача — позволить разработчикам сосредоточиться на бизнес-логике, а не на настройке инфраструктуры. Достичь этого помогают три опорных столпа:

1. Устойчивость сообщений — сообщения передаются по каналам, обеспечивая асинхронное выполнение и соблюдение шаблонов, таких как автоматические повторы и обработка ошибок. Это снижает вероятность неправильной настройки системы.

2. Декларативная конфигурация — вместо сложной ручной настройки применяется подход с атрибутами, где каждый метод помечается как обработчик команды. Это упрощает разработку, позволяет избежать ошибок конфигурации и позволяет новым разработчикам работать с системой без глубокого понимания её устройства.

3. Блоки построения — использование готовых решений, таких как агрегаты и проекции, помогает избежать повторяющегося кода, который загружает процесс разработки. Агрегаты позволяют сосредоточиться на бизнес-логике, упрощая процесс обновления и хранения данных, а проекции помогают быстро создавать представления данных.

👉Читать статью с примерами кода(Если не открывается попробуйте включить VPN)
💬Итак, когда есть анонимный класс, который дал анонимный объект, можно ли деанонимизировать его и использовать в другом месте кода?

Благодаря class_alias() и $object::class это возможно!
12👾10👍2
side-effects-detector

Эта библиотека анализирует php-код на предмет побочных эффектов.

Побочные эффекты классифицируются по категориям, чтобы их было легче отфильтровать в зависимости от вашего сценария использования.
👍2
2025/07/12 22:44:32
Back to Top
HTML Embed Code: