Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Какая разница между MyISAM и InnoDB? В каких случаях и что лучше применять?

MyISAM и InnoDB — это два самых распространенных типа таблиц в MySQL. Отличия между ними заключаются в следующем:

1. Система хранения данных: MyISAM использует таблицы с фиксированной длиной строк, в то время как InnoDB использует таблицы с переменной длиной строк. Это означает, что MyISAM обычно быстрее при выполнении операций чтения, а InnoDB более эффективен при выполнении операций записи.

2. Транзакции и целостность данных: InnoDB поддерживает ACID-транзакции (Atomicity, Consistency, Isolation, Durability — Атомарность, Согласованность, Изолированность, Устойчивость). Это означает, что в случае сбоя данных, InnoDB может откатить все изменения, сохраняя целостность данных. MyISAM не поддерживает транзакции и не обеспечивает такую же уровень целостности данных.

3. Блокировка таблиц: MyISAM блокирует всю таблицу во время выполнения операции записи, в то время как InnoDB блокирует только строки, с которыми происходит операция. Это означает, что InnoDB обычно более подходит для многопользовательских приложений, где множество операций происходит одновременно.

4. Внешние ключи: InnoDB поддерживает внешние ключи (foreign keys), что облегчает поддержку связей между таблицами и обеспечивает целостность данных. MyISAM не поддерживает внешние ключи.

Итак, в каких случаях что лучше использовать:

🔸 Если нагрузка на базу данных состоит главным образом из операций чтения, то MyISAM может быть предпочтительнее из-за его более высокой производительности.
🔸 Если приложение требует поддержку транзакций (например, при обработке платежей или других критически важных операций), или имеется необходимость в внешних ключах для поддержания целостности данных, то InnoDB является более подходящим выбором.

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

#вопросы_с_собеседований
👍15🥱8
Поддержка HTML 5 в PHP 8.4

В PHP 8.4 появится парсер, совместимый с HTML 5. Также подчеркивается, что, несмотря на давние недостатки PHP и отсутствие надлежащей поддержки HTML 5, эта новая функция представляет собой значительное улучшение. Новый парсер полностью совместим с предыдущими версиями и расположен в новом пространстве имен под классом \Dom\HTMLDocument, в то время как старый класс \DOMDocument остается в основном без изменений, теперь расширяя абстрактный класс \Dom\Document.

Ключевые особенности нового парсера включают:

🔸Обратная совместимость: Старый класс \DOMDocument сохранен с незначительными изменениями, в то время как новый парсер, совместимый с HTML 5, представлен в отдельном классе.

🔸Статические конструкторы: Новая реализация использует статические конструкторы (например, createEmpty, createFromFile и createFromString), вместо вызова методов на вновь созданных объектах.

🔸Новые объекты DOM: Использование нового парсера приводит к созданию других типов объектов значений (например, \DOM\Node вместо \DOMNode), что отражает различия между старой и новой реализациями.
🔥7👍2🎉2🥱21
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍1
#дайджест #phpdevjob

Вакансии PHP разработчиков уровня Junior

▪️PHP Developer
Санкт-Петербург. KITFORT — производство и продажa бытовой техники нового поколения
Подробнее

▪️PHP-Developer
Воронеж. ОФИСМАГ — обеспечении потребителей товарами и услугами для работы и учёбы
Подробнее

Вакансии PHP разработчиков уровня Middle

▪️Backend разработчик PHP
Набережные Челны. PROFFIT GO — цифровая экосистема решений для управления автопарками
Подробнее

▪️PHP-разработчик
Самара. АИ Технолоджис — программные решения под индивидуальные запросы
Подробнее

Вакансии PHP разработчиков уровня Senior

▪️Разработчик PHP
Норильск. MACRO — разработка IT-решений для строительной отрасли
Подробнее

▪️PHP-программист
Удаленка. Alef — разработка ПО
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
😁61🤔1
Улучшенная «ленивая» загрузка

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

В Tempest используются типизированные свойства, чтобы упростить работу с отношениями между моделями. Например, тип свойства Author сам по себе указывает на отношение «принадлежит», а аннотация /** @var Chapter[] $chapters */ обозначает отношение «имеет много». Модели в этом фреймворке не связаны напрямую с базой данных, что позволяет сохранять их в различных форматах, таких как JSON, Redis или XML.

Важной частью проекта стал механизм отложенной загрузки данных (lazy loading). По умолчанию ORM не загружает отношения при извлечении данных, чтобы избежать проблем с производительностью, таких как проблема n+1 запросов. Если попытаться обратиться к незагруженному отношению, система выдаст ошибку вместо того, чтобы автоматически выполнять дополнительные запросы, как это делает Laravel.

Рассказ о реализации отложенной загрузки в PHP переходит к магическому методу __get(), который, однако, не вызывается при доступе к неинициализированным типизированным свойствам. Для решения этой задачи был использован трюк: неинициализированные свойства удаляются с помощью unset, что заставляет PHP вызвать __get() при первом обращении к свойству.

Завершая, разработчик размышляет о том, как новая функциональность, предложенная в Lazy Objects для PHP 8.4, может значительно упростить реализацию подобных механизмов в будущем.
🥱54👍1
Добавление Swagger UI в ваше приложение Laravel

Пакет Swagger UI для Laravel упрощает доступ к файлу Swagger (JSON или YAML OpenAPI v3) вашего проекта через интерфейс Swagger UI прямо в вашем приложении Laravel. Всё, что вам нужно сделать, это поместить файл OpenAPI в директорию resources/swagger/openapi.json (это можно настроить) и перейти по пути /swagger в локальной среде проекта.
👍8🥱5
Привет, друзья! 👋

Мы готовим статью о производительности труда программистов и хотим узнать ваше мнение. Поделитесь своими мыслями, ответив на следующие вопросы:

Согласны ли вы с утверждением, что программирование — это на 9/10 мышление и только на 1/10 набор кода? 🤔

- Полностью согласен 💯
- Скорее согласен 👍
- Затрудняюсь ответить 🤷
- Скорее не согласен 👎
- Совершенно не согласен 🚫

Сколько времени в среднем вам потребуется, чтобы восстановить код, написанный за один рабочий день? ⏱️

- Менее 30 минут
- 30-60 минут
- 1-2 часа
- 2-4 часа
- Более 4 часов

Какие факторы, по вашему мнению, наиболее сильно влияют на производительность программиста? (выберите до 3 вариантов) 🚀

- Качество рабочей среды и инструментов 🛠️
- Ясность поставленных задач и требований 📝
- Возможность сосредоточиться без отвлечений 🧘
- Эффективная коммуникация в команде 🗣️
- Постоянное обучение и развитие навыков 📚
- Мотивация и интерес к проекту 💪
- Опыт и экспертиза в конкретной области 🏆
- Другое (укажите в комментариях) 💡

Поделитесь своими мыслями и опытом в комментариях! Как вы оцениваете соотношение «мышления» и «кодинга» в своей работе? Какие методы вы используете для повышения эффективности мыслительного процесса?
💯28👍111🔥1🌚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
«Почему я предпочитаю функции массивов циклам»

Здесь обсуждается преимущество использования функций для работы с массивами в PHP вместо циклов foreach. Автор объясняет, что такие функции, как array_map, array_filter, и array_reduce, выполняют определённые операции для каждого элемента массива и возвращают новое значение.

Основные тезисы:

🔸Четкость намерений:

Использование функций для работы с массивами позволяет ясно понять намерения кода. Например, array_filter означает фильтрацию массива, array_map — преобразование каждого элемента, сохраняя структуру, а array_reduce — преобразование массива в новую структуру.

🔸Всё происходит внутри функции:

В цикле foreach некоторые переменные могут находиться вне самого цикла, что может привести к путанице, особенно после рефакторинга. В функции же всё выполняется внутри неё, что делает код более компактным и понятным.

🔸Меньше шансов на побочные эффекты:

В PHP можно использовать замыкания (closures) с синтаксисом fn($parameters), что снижает вероятность побочных эффектов, так как переменные, изменённые внутри функции, не влияют на те, что находятся вне её.
😁12👍91🌚1
#дайджест новостей по PHP за неделю:

🔎Выпущен CakePHP 5.0.1-RC2 — Улучшения включают: Базовые классы CakePHP теперь совместимы с PHPUnit 11. Заменено внутреннее использование md5 на xxh128. Это повлияло на хэши, используемые для групповых префиксов в Cache + многое другое!

🔎Поддержка лог-файлов Laravel в PhpStorm

🔎Новый помощник для работы со строками, утверждение Enums в AssertableJson и многое другое в Laravel 11.20 — На этой неделе команда Laravel выпустила версию 11.20, в которую вошли новый метод коллекционирования, метод дедупликации строк, возможность использования Enums в AssertableJson и многое другое.

🔎PHP 8.4.0 Alpha 4 доступен для тестирования — Команда PHP рада сообщить о выходе второго тестового релиза PHP 8.4.0, Alpha 4. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.

🔎Неделя Symfony #919 (5-11 августа 2024 года)
👍2🎉2
Как создать тест кейс в Laravel с помощью Pest

Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
👍3🥱2
💬Вы можете использовать правило проверки required_if_accepted, которое гарантирует, что проверяемое поле является обязательным, если другое поле принято (значение yes, on, 1 или true).
🔥4👍2😢1
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?

При клонировании объекта, свойство, которое является объектом, будет содержать ссылку на тот же дочерний объект, а не его копию.

Чтобы изменить это поведение и создать копию дочернего объекта в клонированном объекте, необходимо определить метод __clone() для класса. В этом методе можно явно создать копию дочернего объекта и присвоить ее свойству клонируемого объекта.
Пример реализации на фото

#вопросы_с_собеседований
👍14🥱5