cookie

نحن نستخدم ملفات تعريف الارتباط لتحسين تجربة التصفح الخاصة بك. بالنقر على "قبول الكل"، أنت توافق على استخدام ملفات تعريف الارتباط.

avatar

DevelGuru | Заметки программиста

Заметки программиста 👨‍💼

إظهار المزيد
مشاركات الإعلانات
360
المشتركون
-124 ساعات
-17 أيام
-1430 أيام

جاري تحميل البيانات...

معدل نمو المشترك

جاري تحميل البيانات...

Чем отличается stop от мока ? Спросят с вероятностью 13% В ООП и, в частности, в тестировании, существуют разные методы и инструменты для создания поддельных объектов, которые используются для замены реальных зависимостей в тестах. Два из таких методов — это stubs (стабы) и mocks (моки). Они имеют разные цели и используются по-разному. Stubs (Стабы) Это простые поддельные объекты, которые возвращают заранее заданные данные, когда их методы вызываются. Они не проверяют, как они были вызваны, а лишь предоставляют фиксированные ответы, необходимые для теста. Основные характеристики: ✅Цель: Возврат фиксированных значений. ✅Использование: Подставляют зависимости, чтобы изолировать тестируемый код от внешних влияний. ✅Проверка: Не проверяют взаимодействия с тестируемым кодом. class User private $database; public function __construct(Database $database) $this->database = $database; public function getUserName($userId) return $this->database->fetchUserName($userId); class DatabaseStub public function fetchUserName($userId) return 'John Doe'; $databaseStub = new DatabaseStub(); $user = new User($databaseStub); echo $user->getUserName(1); // Выведет "John Doe" В этом примере DatabaseStub возвращает фиксированное значение 'John Doe', когда вызывается метод fetchUserName. Mocks (Моки) Это поддельные объекты, которые не только возвращают фиксированные данные, но и проверяют, как они были вызваны. Моки позволяют задавать ожидания относительно вызовов их методов и проверяют, что эти ожидания выполнены во время выполнения теста. Основные характеристики: ✅Цель: Проверка взаимодействий и поведения. ✅Использование: Подменяют зависимости и проверяют, как тестируемый код взаимодействует с ними. ✅Проверка: Проверяют вызовы методов, аргументы вызовов и количество вызовов. use PHPUnit\Framework\TestCase; class UserTest extends TestCase public function testGetUserName() // Создаем мок объекта Database $databaseMock = $this->createMock(Database::class); // Задаем ожидания: метод fetchUserName должен быть вызван с аргументом 1 и вернуть 'John Doe' $databaseMock->expects($this->once()) ->method('fetchUserName') ->with($this->equalTo(1)) ->willReturn('John Doe'); $user = new User($databaseMock); $this->assertEquals('John Doe', $user->getUserName(1)); В этом примере мы используем PHPUnit для создания мока Database. Мы задаем ожидание, что метод fetchUserName будет вызван один раз с аргументом 1 и вернет 'John Doe'. Основные отличия: 1️⃣Назначение: ✅Стабы: Возвращают заранее заданные данные, изолируя тестируемый код от реальных зависимостей. ✅Моки: Проверяют взаимодействия и поведение тестируемого кода с его зависимостями. 2️⃣Фокус: ✅Стабы: Сфокусированы на данных, которые возвращаются. ✅Моки: Сфокусированы на том, как методы были вызваны, с какими аргументами и сколько раз. 3️⃣Простота: ✅Стабы: Просты в реализации и не проверяют взаимодействия. ✅Моки: Более сложные, так как включают проверки взаимодействий и поведения. Если объяснить совсем просто: стабы возвращают заранее заданные ответы, а моки проверяют, как именно и сколько раз их методы были вызваны. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
Photo unavailableShow in Telegram
Новый учебный год уже начался, а значит, самое время подбодрить себя и настроиться на позитивную волну! Как это сделать? Воспользоваться новым чат-ботом Яндекс Образования! Он превращает любимые школьные и студенческие мемы в кастомный стикерпак с вашим фото. Переходите по ссылке и начинайте творить! Бот будет активен до 30 сентября
إظهار الكل...
Ищешь полезные знания по архитектуре PHP-приложений? Подключайся к онлайн-конференции Podlodka PHP Crew, которая пройдет с 30 сентября по 4 октября! Получишь практические кейсы и советы от экспертов с опытом реальных внедрений в крупных проектах. 💡Ключевые спикеры сезона: 🔥 Кирилл Мокевнин, сооснователь Hexlet, научит строить код на базе явного состояния и флагового программирования, от простых регистраций до сложной синхронизации данных. 💡 Валентин Удальцов, opensource-разработчик, объяснит, когда стоит внедрять CQRS и как избежать ненужных сложностей. 💳 Дмитрий Кириллов, CTO 1С-Старт, разберет ошибки в банковских интеграциях и покажет, как проектировать качественные API на PHP. 📊 Алексей Солодкий из BelkaCar покажет, как использовать Prometheus для кастомных метрик и организовать мониторинг PHP-приложений. Не упусти шанс улучшить свои навыки! Подробности и билеты на сайте: https://podlodka.io/phpcrew А промокод сообщества php_crew_5_jwg1i1 даёт скидку еще в 500 руб🥳
إظهار الكل...

Что делает final ? Спросят с вероятностью 13% Ключевое слово final используется для ограничения наследования и переопределения классов и методов. Оно выполняет две основные функции: 1️⃣Запрет наследования классов. 2️⃣Запрет переопределения методов в классах-наследниках. Запрет наследования Когда класс объявлен с использованием final, он не может быть унаследован. Это может быть полезно, когда вы хотите предотвратить дальнейшее расширение класса, чтобы сохранить его поведение неизменным и избежать непредвиденных изменений в наследниках. <?php final class BaseClass public function sayHello() echo "Hello from BaseClass\n"; // Попытка наследовать финальный класс приведет к ошибке class ChildClass extends BaseClass // Ошибка: Class ChildClass cannot extend final class BaseClass public function sayHello() echo "Hello from ChildClass\n"; ?> Запрет переопределения Когда метод в классе объявлен с использованием final, этот метод не может быть переопределен в классах-наследниках. Это полезно, когда нужно гарантировать, что конкретный метод будет работать одинаково во всех производных классах. <?php class BaseClass final public function sayHello() echo "Hello from BaseClass\n"; public function greet() echo "Greetings from BaseClass\n"; class ChildClass extends BaseClass // Попытка переопределить финальный метод приведет к ошибке public function sayHello() // Ошибка: Cannot override final method BaseClass::sayHello() echo "Hello from ChildClass\n"; // Не финальный метод можно переопределить public function greet() echo "Greetings from ChildClass\n"; $child = new ChildClass(); $child->sayHello(); // Ошибка $child->greet(); // Выведет: Greetings from ChildClass ?> Зачем это нужно? 1️⃣Сохранение целостности поведения: Использование final позволяет гарантировать, что определенные методы или классы останутся неизменными, независимо от того, какие изменения будут внесены в классы-наследники. 2️⃣Защита важных функциональностей: Ключевые методы, которые не должны изменяться, могут быть защищены с помощью final, чтобы предотвратить потенциальные ошибки или неправильное использование в наследниках. 3️⃣Упрощение понимания кода: Использование final делает код более предсказуемым и понятным для других разработчиков, так как они могут быть уверены, что поведение final методов и классов не будет изменено в наследниках. Ключевое слово final используется для предотвращения наследования классов и переопределения методов, что помогает сохранить целостность поведения кода и защитить важные функциональности. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
Чем composer.json от composer.lock отличается ? Спросят с вероятностью 13% composer.json и composer.lock — это два важных файла, которые используются при управлении зависимостями в проектах PHP с помощью Composer. Несмотря на то, что оба файла играют ключевую роль в процессе установки и управления зависимостями, они имеют разные функции и содержат различную информацию. composer.json Это файл конфигурации, который содержит информацию о проекте и список зависимостей, необходимых для его работы. В этом файле указываются библиотеки и их версии, которые требуется установить для корректной работы проекта. Кроме того, composer.json может содержать метаинформацию о проекте, такую как название, описание, авторы, лицензия и другие параметры. "name": "myproject", "description": "A simple project.", "authors": [ "name": "John Doe", "email": "[email protected]" ], "require": "monolog/monolog": "^2.0", "guzzlehttp/guzzle": "^7.0" В этом примере указаны две зависимости: monolog/monolog версии 2.0 и выше, но не выше 3.0, и guzzlehttp/guzzle версии 7.0 и выше, но не выше 8.0. composer.lock Это файл, который фиксирует точные версии всех установленных зависимостей, а также их транзитивных зависимостей. Когда вы запускаете команду composer install, Composer проверяет файл composer.lock и устанавливает зависимости в точности так, как они указаны в этом файле. Это гарантирует, что все разработчики проекта и среды развертывания будут использовать одну и ту же версию всех библиотек, что помогает избежать проблем с несовместимостью. "packages": [ "name": "monolog/monolog", "version": "2.3.5", "source": "type": "git", "url": "https://github.com/Seldaek/monolog.git", "reference": "aabbccddeeff00112233445566778899aabbccdd" , ... , "name": "guzzlehttp/guzzle", "version": "7.3.0", "source": "type": "git", "url": "https://github.com/guzzle/guzzle.git", "reference": "112233445566778899aabbccddeeff0011223344" , ... ], ... Этот файл создается автоматически при выполнении команды composer install или composer update и не требует ручного редактирования. Основные отличия: 1️⃣Назначение: ✅composer.json: Определяет зависимости проекта и содержит метаинформацию о проекте. ✅composer.lock: Фиксирует точные версии установленных зависимостей для обеспечения консистентности между установками. 2️⃣Редактирование: ✅composer.json: Обычно редактируется вручную разработчиками для добавления или удаления зависимостей. ✅composer.lock: Генерируется и обновляется Composer автоматически. 3️⃣Использование команд: ✅composer.json: Используется командами composer install и composer update для определения зависимостей, которые нужно установить или обновить. ✅composer.lock: Используется командой composer install для установки точно тех версий зависимостей, которые зафиксированы в файле. Если объяснить совсем просто: composer.json говорит, какие библиотеки нужны проекту, а composer.lock фиксирует, какие конкретно версии этих библиотек были установлены, чтобы все пользовались одинаковыми версиями. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
Что такое внешний ключ ? Спросят с вероятностью 13% Внешний ключ (foreign key) — это концепция в реляционных базах данных, которая используется для установления связи между двумя таблицами. Обеспечивает ссылочную целостность данных, гарантируя, что значение в одном столбце (или группе столбцов) соответствует значению в столбце (или группе столбцов) другой таблицы. Основные характеристики 1️⃣Связь между таблицами: Устанавливает связь между столбцом (или столбцами) одной таблицы и столбцом (или столбцами) другой таблицы. 2️⃣Обеспечение ссылочной целостности: Гарантирует, что значения в столбце внешнего ключа соответствуют значениям в столбце первичного ключа связанной таблицы. 3️⃣Ограничения: Может накладывать ограничения на операции вставки, обновления и удаления данных, чтобы сохранить целостность связей между таблицами. Рассмотрим пример, в котором есть две таблицы: orders (заказы) и customers (клиенты). В таблице orders есть столбец customer_id, который ссылается на столбец id в таблице customers. Создание таблиц с внешним ключом CREATE TABLE customers ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL ); CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, order_date DATE NOT NULL, customer_id INT, FOREIGN KEY (customer_id) REFERENCES customers(id) ); Зачем они нужны? 1️⃣Обеспечение целостности данных: Гарантируют, что каждая запись в таблице со ссылкой (например, orders) соответствует действительной записи в связанной таблице (например, customers). 2️⃣Предотвращение удаления данных: Могут предотвратить удаление записей, на которые ссылаются другие таблицы. Например, нельзя удалить клиента, если у него есть связанные заказы. 3️⃣Автоматическое обновление: Могут обеспечить автоматическое обновление значений в связанных таблицах при изменении значений первичных ключей. Ограничения и поведение 1️⃣ON DELETE: Определяет поведение при удалении записей в родительской таблице. ✅CASCADE: Автоматически удаляет записи в дочерней таблице, если соответствующая запись удалена в родительской таблице. ✅SET NULL: Устанавливает значение внешнего ключа в NULL, если соответствующая запись удалена в родительской таблице. ✅RESTRICT: Запрещает удаление записи в родительской таблице, если существуют связанные записи в дочерней таблице. ✅NO ACTION: То же самое, что и RESTRICT. 2️⃣ON UPDATE: Определяет поведение при обновлении значений первичных ключей в родительской таблице. ✅CASCADE: Автоматически обновляет значения внешнего ключа в дочерней таблице при изменении значений в родительской таблице. ✅SET NULL: Устанавливает значение внешнего ключа в NULL, если соответствующее значение изменено в родительской таблице. ✅RESTRICT: Запрещает обновление значений в родительской таблице, если существуют связанные записи в дочерней таблице. ✅NO ACTION: То же самое, что и RESTRICT. Пример CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, order_date DATE NOT NULL, customer_id INT, FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE ON UPDATE CASCADE ); Внешний ключ (foreign key) в реляционных базах данных используется для установления связи между двумя таблицами, обеспечивая ссылочную целостность данных. Он гарантирует, что значения в одной таблице соответствуют значениям в другой, и может накладывать ограничения на операции вставки, обновления и удаления данных для сохранения целостности связей. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
Photo unavailableShow in Telegram
إظهار الكل...
اختر خطة مختلفة

تسمح خطتك الحالية بتحليلات لما لا يزيد عن 5 قنوات. للحصول على المزيد، يُرجى اختيار خطة مختلفة.