Для всех профессионалов и любителей PHP существует незаменимый ресурс - канал "Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter". Здесь собрано все самое полезное для PHP-разработчика в одном месте. Независимо от того, являетесь ли вы опытным специалистом или только начинаете осваивать этот язык программирования, здесь вы найдете множество полезных материалов.
На канале представлены информация по PHP, Laravel, Symfony, CodeIgniter и многим другим аспектам разработки на этом языке. Вы сможете узнать о последних тенденциях, решениях проблем, а также обучиться новым техникам и приемам. Здесь вы найдете статьи, видеоуроки, обзоры, советы и многое другое, что поможет вам улучшить свои навыки и расширить знания в области PHP.
Помимо содержательного наполнения канала, вам доступны также другие полезные ресурсы. Вы сможете ознакомиться со списком других каналов, где представлена дополнительная информация, а также приступить к обучению на соответствующем ресурсе. Кроме того, для удобства пользователей предусмотрена возможность обратной связи через специального бота или запросов о рекламе через соответствующий контакт.
Присоединяйтесь к каналу "Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter", чтобы быть в курсе всех событий, новинок и полезной информации по PHP-разработке. Улучшайте свои навыки, делитесь опытом и общайтесь с другими специалистами в области PHP. Начните свой путь к успеху в программировании с помощью этого ценного ресурса!
19 Jan, 07:02
18 Jan, 18:00
whereAll
», «whereAny
», «orWhereAll
» и «orWhereAny
». Эти методы позволяют сравнивать значение с несколькими столбцами 🚀. 18 Jan, 07:00
final
в классы PHP помогает улучшить архитектуру кода, повысить его качество и упростить сопровождение. Этот подход стимулирует переход от наследования к композиции, снижает вероятность ошибок и делает рефакторинг менее рискованным. Рассмотрим, почему использование final
так важно.final
, появляется множество неопределенностей:final
только там, где это безопасно: для классов без наследников и моков. Процесс включает:final
ко всем подходящим классам.17 Jan, 12:32
17 Jan, 07:03
16 Jan, 18:01
16 Jan, 11:00
16 Jan, 07:03
composer require rector/swiss-knife --dev
vendor/bin/swiss-knife behastan tests
16 Jan, 06:02
15 Jan, 18:00
CREATE INDEX имя_индексаON имя_таблицы (столбец1 [ASC|DESC], столбец2 [ASC|DESC]);
15 Jan, 07:02
14 Jan, 18:00
14 Jan, 07:02
MAX_SIZE
.composer check-style
.composer fix-style
.13 Jan, 20:02
13 Jan, 18:00
11 Jan, 18:00
11 Jan, 11:00
11 Jan, 07:03
composer install
и composer update
. Однако у Composer есть менее известные, но очень полезные команды, которые могут значительно упростить вашу работу над проектом.composer outdated
composer show
composer show backpack/crud
composer why
composer why
. Она покажет, какие зависимости требуют установки данного пакета. Это особенно полезно для анализа сложной цепочки зависимостей.composer licenses
composer licenses
. Она помогает убедиться, что все используемые пакеты соответствуют необходимым требованиям по лицензированию, что особенно важно при работе с открытым исходным кодом.composer check-platform-reqs
check-platform-reqs
проверяет, соответствует ли ваша система требованиям, указанным в composer.json
. Она также проверяет версию PHP и расширения. 10 Jan, 18:02
Str::is()
, добавление признака Dumpable
к экземпляру Uri
и многое другое.10 Jan, 07:04
09 Jan, 18:00
09 Jan, 15:00
09 Jan, 11:01
preg_quote()
: она добавляет обратную косую черту перед каждым специальным символом в строке. Не забудьте использовать второй аргумент, который может содержать любой произвольный разделитель.\Q
и \E
: они превращают все специальные символы в буквенное значение. 09 Jan, 07:02
08 Jan, 17:59
08 Jan, 07:02
07 Jan, 18:00
07 Jan, 07:02
setUp
и tearDown
), фильтрацию и группировку тестов. Однако Pest пошел дальше, предложив функции, которые делают его уникальным:06 Jan, 18:00
whereYear
; даже если ваш столбец проиндексирован, он не будет использован, и база данных выполнит полное сканирование таблицы. Вместо этого лучше использовать диапазоны 🚀. 06 Jan, 07:03
05 Jan, 18:00
05 Jan, 07:01
04 Jan, 18:02
04 Jan, 07:03
04 Jan, 06:02
03 Jan, 07:03
compose.yml
размещается в корне проекта. Он описывает два основных контейнера:compose.override.yml
, позволяющий настраивать дополнительные порты, монтировать директории и включать Xdebug. Это упрощает отладку и разработку.composer.override.prod.yml
, описывающий настройки для продакшн-окружения. 02 Jan, 11:00
01 Jan, 13:01
01 Jan, 07:05
31 Dec, 13:31
31 Dec, 07:03
pipe
, в Scala легко создавать цепочки операций, сохраняя читаемость и типобезопасность кода.30 Dec, 20:03
30 Dec, 18:08
whenQueryingForLongerThan
? Вы можете установить порог в миллисекундах. Если запрос превысит порог, вы можете отправить уведомления или выпить кофе с тем, кто создал запрос 😂. 30 Dec, 07:04
29 Dec, 17:59
29 Dec, 07:02
28 Dec, 18:00
28 Dec, 07:03
index.php
, с помощью настроек веб-сервера (например, .htaccess
для Apache или правил маршрутизации для Nginx).28 Dec, 06:18
27 Dec, 18:00
27 Dec, 07:01
26 Dec, 18:00
26 Dec, 11:00
preventStrayRequests()
», позволяющим избежать реальных запросов во время тестирования? Это удобно не только для сторонних API, но и для локальных API. В то время как ваши тесты могут пройти локально, потому что все окружение работает, они могут провалиться в CI-конвейере. Это происходит потому, что в конвейере CI обычно активен только тот сервис, который вы тестируете, поэтому выполнение фактических запросов к недоступным API приведет к неудаче вашего набора. 26 Dec, 09:39
26 Dec, 06:59
querySelector()
и querySelectorAll()
, упрощает выбор и обработку элементов в HTML и XML-документах.querySelector()
: выбирает первый элемент, соответствующий заданному CSS-селектору.$doc = new DOMDocument();
$doc->loadHTML('<div class="header">Header Content</div>');
$element = $doc->querySelector('.header');
echo $element->textContent; // Вывод: "Header Content"
querySelectorAll()
: возвращает коллекцию всех элементов, подходящих под CSS-селектор.$doc = new DOMDocument();
$doc->loadHTML('<div class="item">Item 1</div><div class="item">Item 2</div>');
$elements = $doc->querySelectorAll('.item');
foreach ($elements as $element) {
echo $element->textContent . "\n";
}
// Вывод:
// Item 1
// Item 2
querySelectorAll()
возвращает статический список узлов, который не обновляется при изменении DOM.:nth-child()
, может быть ограничен 25 Dec, 18:00
array_map()
в PHP используется для применения заданной функции к каждому элементу массива. Она создает новый массив, содержащий результаты применения функции к каждому элементу исходного массива. Функция обратного вызова применяется к каждому элементу последовательно, и ключи сохраняются.square()
применяется к каждому элементу массива $numbers с использованием array_map()
, что приводит к созданию нового массива $squaredNumbers, где каждый элемент является квадратом соответствующего элемента исходного массива.25 Dec, 12:01
25 Dec, 09:00
25 Dec, 07:02
/app
и /Resources
все файлы теперь располагаются в корне проекта.$this->get('service')
) к внедрению зависимостей в конструкторе. Этот шаг значительно упрощает архитектуру._defaults: autowire: true
можно сократить настройки в services.yml
.symfony/symfony
рекомендуется добавлять в проект только те пакеты Symfony, которые действительно используются.#[Route]
и #[Required]
, что упрощает написание и понимание кода.#[TaggedIterator]
позволяет автоматически внедрять набор сервисов.#[Autowire]
упрощает передачу переменных окружения в сервисы. 24 Dec, 18:00
24 Dec, 12:48
24 Dec, 07:01
23 Dec, 18:00
23 Dec, 07:04
22 Dec, 18:00
git bundle
используется для упаковки репозитория или его части в один файл. Этот файл можно передать, скопировать или сохранить, а затем использовать для восстановления или обновления репозитория в другом месте. Основное назначение этой команды — перенос изменений без необходимости наличия сетевого подключения, например, в случаях, когда доступ к удалённому репозиторию ограничен.git bundle
может использоваться для создания архива репозитория с сохранением всей истории.git bundle create my-repo.bundle --all
--all
указывает, что нужно упаковать все ветки и историю.git bundle create my-feature.bundle main
git bundle verify my-repo.bundle
git clone my-repo.bundle my-new-repo
22 Dec, 07:03
22 Dec, 06:01
21 Dec, 18:01
21 Dec, 07:03
fetch="LAZY»
, чтобы загружать связанные данные только при необходимости. Однако Doctrine загружал связанные сущности заранее, что приводило к избыточной нагрузке.Store
имела связь OneToOne с сущностью StoreDetail
, содержащей метаданные о магазине. Даже при включённой ленивой загрузке Doctrine автоматически добавлял JOIN, что влияло на производительность:StoreDetail
ссылался на Store
, что позволило Doctrine корректно применять ленивую загрузку.20 Dec, 18:00
20 Dec, 11:01
20 Dec, 07:02
19 Dec, 18:00
06 Dec, 17:59
06 Dec, 07:03
05 Dec, 18:00
05 Dec, 15:00
05 Dec, 11:01
05 Dec, 07:05
04 Dec, 18:00
spl_autoload_register
в PHP используется для автоматической загрузки классов гибким и эффективным способом. Она часто используется в объектно-ориентированных приложениях PHP, где классы организованы в соответствии со стандартом PSR-4 или аналогичными соглашениями.spl_autoload_register
упрощает этот процесс, позволяя разработчикам регистрировать собственные функции автозагрузки.04 Dec, 07:03
04 Dec, 06:01
03 Dec, 18:00
03 Dec, 07:03
if ($mixed)
), исключаются ложные значения.if (!$mixed)
), исключаются истинные значения.int
, bool
или string
помогают уточнять тип переменной в конкретных контекстах.isset()
теперь точнее определяет тип ключа массива. Например, isset($array[$mixed])
исключает невозможные значения для $mixed.non-falsy-string
: строка, которая не является ложным значением.@param-out
: уточняет, как изменяется переданный по ссылке параметр.value-of
и другие.preg_match()
теперь используют дерево синтаксиса регулярных выражений. Также разработан инструмент phpstan-dba для анализа запросов к базе данных с учётом схемы данных. 02 Dec, 20:03
02 Dec, 18:00
02 Dec, 11:00
02 Dec, 07:04
Mail::build
в Laravel позволяет создавать почтовые программы на лету!01 Dec, 18:00
01 Dec, 07:04
30 Nov, 18:00
array_map()
предоставляет только значение массива, но не ключ. Чтобы получить доступ к ключу, используйте дополнительные аргументы и array_keys()
.30 Nov, 07:03
29 Nov, 19:05
URL::forceHttps()
и многое другое.29 Nov, 11:00
29 Nov, 07:02
28 Nov, 18:00
28 Nov, 11:00
28 Nov, 07:00
27 Nov, 18:03
27 Nov, 14:19
27 Nov, 12:13
27 Nov, 07:00
26 Nov, 18:00
26 Nov, 15:01
26 Nov, 07:00
chunk()
, chunkById()
и Lazy Collections для эффективной обработки больших наборов данных в Laravel. 25 Nov, 18:00
25 Nov, 15:15
25 Nov, 11:02
25 Nov, 07:00
opcache.validate_timestamps=0
— отключить проверку временных меток.opcache.file_update_protection=0
— мгновенное кэширование новых файлов.opcache.memory_consumption
) и количество файлов (opcache.max_accelerated_files
) для ваших нужд.24 Nov, 18:00
24 Nov, 07:00
23 Nov, 18:00
23 Nov, 07:00
22 Nov, 18:03
22 Nov, 13:35
22 Nov, 07:00
22 Nov, 06:00
21 Nov, 18:02
21 Nov, 11:00
21 Nov, 07:00
18 Nov, 20:02
18 Nov, 18:00
18 Nov, 07:00
17 Nov, 18:01
17 Nov, 07:00
16 Nov, 18:00
class_alias()
и $object::class
это возможно! 16 Nov, 07:00
16 Nov, 06:02
15 Nov, 07:04
14 Nov, 18:01
14 Nov, 11:00
14 Nov, 07:00
ObservedBy
назначает наблюдателя для модели, что помогает вынести логику наблюдателей в отдельный класс, делая модель проще и чище. Например, можно связать модель User
с наблюдателем UserObserver
.ScopedBy
можно задать глобальную область видимости для модели. Это полезно для применения стандартных ограничений запроса ко всем операциям с моделью. Например, можно добавить фильтр на активных пользователей, используя глобальный скоуп ActiveScope
.CurrentUser
.ProcessPodcastJob
удалится, если модель Podcast не найдена.WithoutRelations
позволяет загрузить модель без её связей, что бывает полезно для экономии ресурсов, если связи не требуются.13 Nov, 18:00
13 Nov, 07:00
12 Nov, 18:01
12 Nov, 07:00
keepalive
: введен интерфейс KeepaliveReceiverInterface
, который позволяет транспортам оповещать о том, что сообщение все еще обрабатывается, избегая его возврата в очередь. Метод keepalive(Envelope $envelope): void
отправляет уведомление о том, что сообщение активно, предотвращая тайм-аут на стороне транспорта. Несколько встроенных транспортов уже реализуют этот интерфейс, и поддержка будет расширена в будущих версиях Symfony.setAlarmInterval
в основной класс приложений Symfony для установки интервала сигнала SIGALRM. Команды messenger:consum
e и messenger:failed:retry
теперь поддерживают опцию --keepalive
, которая позволяет периодически вызывать keepalive с помощью SIGALRM сигнала. TextPart
(quoted-printable, base64, 8bit). Теперь разработчики могут создавать и использовать собственные энкодеры для специфических нужд, таких как SOAP-вложения.finishedIndicatorValue
. 10 Nov, 07:00
09 Nov, 18:00
09 Nov, 07:03
08 Nov, 18:00
08 Nov, 08:08
08 Nov, 07:03
07 Nov, 18:02
07 Nov, 11:00
elasticsearch-php
на гитхабе выдал 404 ошибку. Что было дальше — в статье. 07 Nov, 07:02
06 Nov, 18:01
06 Nov, 07:00
05 Nov, 18:08
05 Nov, 18:02
05 Nov, 07:00
04 Nov, 20:02
04 Nov, 18:00
28 Oct, 18:00
28 Oct, 07:06
withConsecutive()
был объявлен устаревшим, а в PHPUnit 10 — удалён, что вызвало множество вопросов на форумах и в проектах. Это изменение оказалось неудобным для разработчиков, так как прямой замены для метода не предусмотрено, и обновление зачастую требует много времени. Однако существует способ заменить withConsecutive()
, который делает тесты более гибкими и читаемыми.withConsecutive()
использовался для проверки параметров вызова метода в разном порядке. Например, при первом вызове ожидался один набор параметров, при втором — другой. Однако замена его с помощью метода willReturnCallback()
позволяет использовать более гибкий подход. В новом коде параметры проверяются в переданном в willReturnCallback()
анонимном методе, где также можно отслеживать номер вызова.InvokedCount
, который увеличивает значение с каждым вызовом. Мы можем проверять параметры по вызовам, используя метод getInvocationCount()
(в PHPUnit 10 переименованный в numberOfInvocations()
).willReturnCallback()
включают:27 Oct, 18:00
27 Oct, 07:05
26 Oct, 18:00
26 Oct, 11:00
26 Oct, 07:07
25 Oct, 11:01
25 Oct, 07:04
24 Oct, 18:01
24 Oct, 12:32
24 Oct, 11:00
24 Oct, 07:04
23 Oct, 18:00
23 Oct, 09:04
23 Oct, 07:08
22 Oct, 18:01
22 Oct, 07:00
22 Oct, 06:00
21 Oct, 20:03
21 Oct, 18:00
wherePivot
. 21 Oct, 07:00
20 Oct, 18:00
20 Oct, 07:00
19 Oct, 18:00
19 Oct, 07:05
18 Oct, 18:10
18 Oct, 07:00
17 Oct, 18:01
17 Oct, 14:00
17 Oct, 11:00
17 Oct, 07:07
16 Oct, 18:00
16 Oct, 15:01
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Erid 2Vtzqv6hcvX 16 Oct, 07:00
16 Oct, 06:03
15 Oct, 18:01
15 Oct, 07:00
14 Oct, 18:00
14 Oct, 07:00
13 Oct, 18:00
13 Oct, 07:00