ch
Feedback
PHP | Вопросы собесов

PHP | Вопросы собесов

前往频道在 Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

显示更多
2 342
订阅者
-224 小时
-67
-2530
帖子存档
🤔 Что такое DP (Dynamic Programming)? 1. Динамическое программирование — это метод оптимизации, используемый для решения задач, разбиваемых на подзадачи. 2. Результаты подзадач сохраняются и переиспользуются, чтобы избежать повторных вычислений. 3. Используется для задач оптимизации, например, нахождение кратчайшего пути, задачи Фибоначчи или задач на разбиение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что есть иммутабельный объект? Это объект, состояние которого нельзя изменить после его создания. Это означает, что ни одно из свойств объекта не может быть изменено после того, как он был инициализирован. Всякий раз, когда необходимо изменить состояние иммутабельного объекта, вместо изменения текущего объекта создается новый объект с новым состоянием. 🚩ПлюсыБезопасность и предсказуемость Иммутабельные объекты безопасны для использования в многопоточных средах, так как их состояние не может быть изменено после создания, что предотвращает состояние гонки и другие проблемы, связанные с конкурентным доступом. ➕Простота понимания и отладки Так как состояние иммутабельного объекта не изменяется, код, использующий такие объекты, становится более предсказуемым и легче в отладке. ➕Облегчение управления состоянием Иммутабельные объекты упрощают управление состоянием в приложениях, так как можно быть уверенным, что состояние объекта не изменится неожиданным образом. ➕Безопасность при передаче данных Иммутабельные объекты могут безопасно передаваться между различными частями программы или даже между разными системами, так как нет риска, что их состояние будет изменено в процессе передачи.
# Строки являются иммутабельными
s = "hello"
# Любая операция, изменяющая строку, создает новую строку
s = s.upper()
print(s)  # Выведет "HELLO"

# Кортежи также являются иммутабельными
t = (1, 2, 3)
# Попытка изменить элемент кортежа вызовет ошибку
# t[0] = 0  # TypeError: 'tuple' object does not support item assignment
Класс String является иммутабельным. Всякий раз, когда выполняется операция, изменяющая строку, создается новый объект строки.
String s = "hello";
s = s.toUpperCase();
System.out.println(s);  // Выведет "HELLO"
🚩Для создания своих иммутабельных классов в Java можно сделать следующее Сделать класс финальным, чтобы предотвратить наследование. Все поля объявить приватными и финальными. Не предоставлять методов для изменения состояния (сеттеров). Обеспечить, чтобы изменяемые объекты, передаваемые в конструктор, были скопированы.
public final class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
🚩Для создания иммутабельных объектов необходимо соблюдать несколько правил: 🟠Приватные и финальные поля Все поля объекта должны быть объявлены как private и final. 🟠Отсутствие сеттеров Не должны быть предоставлены методы, которые позволяют изменять состояние объекта. 🟠Конструкторы Конструкторы должны устанавливать все поля объекта, инициализируя их значениями, которые не могут быть изменены после создания объекта. 🟠Защита изменяемых объектов Если объект содержит изменяемые поля, такие как массивы или коллекции, они должны быть скопированы или защищены от изменения извне. Ставь 👍 и забирай 📚 Базу знаний

🤔 Реализация Fibonacci с рекурсией или без? 1. С рекурсией: проще написать, но требует больше памяти из-за вложенных вызовов. 2. Без рекурсии: итеративный метод или использование динамического программирования, эффективнее с точки зрения производительности. 3. Выбор зависит от задачи: рекурсия подходит для демонстрации, итерация — для практических целей. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое агрегат? Агрегат – это термин, часто используемый в области баз данных и программирования, который обозначает способ группировки данных для выполнения различных операций, таких как суммирование, подсчёт, нахождение среднего значения и другие. В реляционных базах данных агрегаты применяются для выполнения агрегатных функций, таких как SUM(), COUNT(), AVG(), MAX(), MIN() и других. 🚩Зачем нужны? 🟠Анализ данных: Агрегаты позволяют получить сводные данные, которые помогают анализировать и понимать большие наборы данных. Например, можно узнать общее количество продаж, среднюю стоимость заказа, максимальную и минимальную зарплату сотрудников и т.д. 🟠Оптимизация запросов: Использование агрегатных функций позволяет выполнять сложные вычисления на сервере базы данных, что экономит время и ресурсы по сравнению с выполнением этих операций на клиентской стороне. 🚩Примеры использования агрегатных функций: Суммирование (SUM):
-- Получение общей суммы всех заказов
SELECT SUM(total_amount) AS total_sales
FROM orders;
Подсчёт (COUNT):
-- Подсчёт общего количества заказов
SELECT COUNT(*) AS total_orders
FROM orders;
Среднее значение (AVG):
-- Нахождение средней суммы заказа
SELECT AVG(total_amount) AS average_order_value
FROM orders;
Максимальное значение (MAX):
-- Нахождение максимальной суммы заказа
SELECT MAX(total_amount) AS max_order_value
FROM orders;
Минимальное значение (MIN):
-- Нахождение минимальной суммы заказа
SELECT MIN(total_amount) AS min_order_value
FROM orders;
🚩 Группировка данных с использованием GROUP BY: Для более сложных запросов можно использовать агрегатные функции вместе с оператором GROUP BY, чтобы группировать данные по определённому критерию. В этом запросе результаты будут сгруппированы по customer_id, и для каждого клиента будет рассчитана общая сумма заказов.
-- Получение общей суммы заказов для каждого клиента
SELECT customer_id, SUM(total_amount) AS total_sales_per_customer
FROM orders
GROUP BY customer_id;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что из себя представляет http-запрос? HTTP-запрос — это сообщение, которое клиент отправляет серверу для выполнения определённой операции, например получения данных (GET) или их отправки (POST). Запрос содержит метод, URL, заголовки и тело запроса (если необходимо). Ответ сервера включает статус выполнения, заголовки и данные (если применимо). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что реализует класс Datetime? Класс DateTime в PHP предоставляет удобные инструменты для работы с датами и временем. Он заменяет устаревшие функции date(), strtotime() и делает код более читаемым и гибким. 🚩Что умеет `DateTime`? Создавать даты и время. Изменять, прибавлять, вычитать дни, месяцы, годы. Преобразовывать дату в строку (format()). Работать с часовыми поясами (DateTimeZone). Сравнивать даты (diff()). Преобразовывать в Unix Timestamp (getTimestamp()). 🚩Примеры использования `DateTime` 1⃣Создание объекта DateTime
$date = new DateTime(); // Текущая дата и время
echo $date->format('Y-m-d H:i:s'); // 2025-02-24 15:30:00
2⃣Создание DateTime с конкретной датой
$date = new DateTime('2023-12-31 23:59:59');
echo $date->format('d.m.Y H:i'); // 31.12.2023 23:59
3⃣Прибавить / Вычесть дни, месяцы, годы (modify())
$date = new DateTime('2024-01-01');
$date->modify('+1 month'); // Добавить 1 месяц
echo $date->format('Y-m-d'); // 2024-02-01

$date->modify('-10 days'); // Вычесть 10 дней
echo $date->format('Y-m-d'); // 2024-01-22
4⃣Разница между датами (diff())
$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2025-01-01');

$diff = $date1->diff($date2);
echo $diff->days; // 366 (разница в днях)
echo $diff->y;    // 1 (разница в годах)
5⃣Работа с часовыми поясами (DateTimeZone)
$date = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s'); // Время в Нью-Йорке
6⃣Преобразование DateTime в Timestamp (getTimestamp())
$date = new DateTime('2024-01-01');
echo $date->getTimestamp(); // 1704067200 (Unix-время)
7⃣Создание DateTime из Timestamp (setTimestamp())
$date = new DateTime();
$date->setTimestamp(1704067200);
echo $date->format('Y-m-d H:i:s'); // 2024-01-01 00:00:00
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое алгоритмическая сложность? Алгоритмическая сложность описывает эффективность алгоритма в зависимости от объёма входных данных. Измеряется во времени выполнения (Time Complexity) и потреблении памяти (Space Complexity). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Е
📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!

🤔 Что известно о MVC? Это паттерн проектирования, широко используемый для создания структурированных и масштабируемых приложений. Он разделяет приложение на три основных компонента: Модель (Model), Представление (View) и Контроллер (Controller). 🚩Основные компоненты 🟠Модель (Model) Модель отвечает за данные и бизнес-логику приложения. Она управляет доступом к данным, логикой их обработки и взаимодействием с базой данных. В приложении электронной коммерции модель будет содержать классы, представляющие продукты, пользователей и заказы, а также методы для работы с этими данными (например, добавление нового продукта, обработка заказа и т.д.). 🟠Представление (View) Представление отвечает за отображение данных пользователю. Оно формирует пользовательский интерфейс на основе данных, предоставляемых моделью. Веб-страницы, отображающие список продуктов, форму регистрации или страницу заказа, являются примерами представлений. 🟠Контроллер (Controller) Контроллер действует как посредник между моделью и представлением. Он обрабатывает входные данные от пользователя, взаимодействует с моделью для выполнения необходимых операций и выбирает соответствующее представление для отображения результата. Контроллер может обрабатывать запрос на добавление нового продукта, получать данные от модели и затем отображать обновленный список продуктов через представление. 🚩Примеры Model
// app/Models/Product.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model {
    protected $fillable = ['name', 'price', 'description'];
}
Controller
// app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller {
    public function index() {
        $products = Product::all();
        return view('products.index', compact('products'));
    }

    public function store(Request $request) {
        Product::create($request->all());
        return redirect()->route('products.index');
    }
}
View
<!-- resources/views/products/index.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Products</title>
</head>
<body>
    <h1>Products</h1>
    <ul>
        @foreach($products as $product)
            <li>{{ $product->name }} - ${{ $product->price }}</li>
        @endforeach
    </ul>
    <form action="{{ route('products.store') }}" method="POST">
        @csrf
        <input type="text" name="name" placeholder="Product Name">
        <input type="text" name="price" placeholder="Product Price">
        <textarea name="description" placeholder="Product Description"></textarea>
        <button type="submit">Add Product</button>
    </form>
</body>
</html>
🚩ПлюсыРазделение обязанностей Разделяет приложение на три компонента, каждый из которых отвечает за свою задачу. Это упрощает поддержку и масштабирование кода. ➕Улучшенная тестируемость Разделение логики позволяет легко тестировать каждую часть приложения отдельно. ➕Гибкость и переиспользование Компоненты MVC могут быть легко изменены или переиспользованы в других частях приложения или в других проектах. ➕Чистота и упорядоченность кода Способствует созданию чистого и упорядоченного кода, что упрощает работу в команде и ускоряет разработку. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое абстрагирование? Это принцип объектно-ориентированного программирования, позволяющий выделять только важные характеристики объекта и скрывать детали его реализации. 1. Оно фокусируется на том, что объект делает, а не на том, как он это делает. 2. Реализуется через абстрактные классы, интерфейсы или методы. 3. Помогает упрощать сложные системы, скрывая ненужные детали и обеспечивая высокую модульность. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие бывают области видимости? Область видимости (или видимость) определяет, где в коде можно получить доступ к переменным, функциям и другим объектам. В PHP есть несколько видов областей видимости, которые контролируют доступность этих элементов в разных частях программы. 🚩Основные области видимости 🟠Локальная область видимости Переменные, объявленные внутри функции, имеют локальную область видимости и доступны только внутри этой функции.
<?php
function test() {
    $localVar = "I'm local";
    echo $localVar; // Выведет "I'm local"
}
test();
echo $localVar; // Ошибка: переменная не найдена
?>
🟠Глобальная область видимости Переменные, объявленные вне функций и классов, имеют глобальную область видимости и доступны везде в скрипте, кроме внутренних областей видимости (например, внутри функций), если не использовать ключевое слово global.
<?php
$globalVar = "I'm global";

function test() {
    global $globalVar;
    echo $globalVar; // Выведет "I'm global"
}

test();
?>
🟠Область видимости функций и методов Переменные, объявленные внутри функции или метода класса, имеют свою локальную область видимости и не видны за её пределами.
<?php
class Test {
    public function method() {
        $localVar = "I'm local in method";
        echo $localVar; // Выведет "I'm local in method"
    }
}

$test = new Test();
$test->method();
echo $localVar; // Ошибка: переменная не найдена
?>
🟠Область видимости классов Публичная (public) Публичные свойства и методы доступны отовсюду: как внутри класса, так и вне его.
<?php
class Test {
    public $publicVar = "I'm public";

    public function publicMethod() {
        echo $this->publicVar;
    }
}

$test = new Test();
echo $test->publicVar; // Доступно и выведет "I'm public"
$test->publicMethod(); // Доступно и выведет "I'm public"
?>
🟠Защищённая (protected) Защищённые свойства и методы доступны только внутри класса и его наследников.
<?php
class Base {
    protected $protectedVar = "I'm protected";

    protected function protectedMethod() {
        echo $this->protectedVar;
    }
}

class Derived extends Base {
    public function accessProtected() {
        echo $this->protectedVar; // Доступно
        $this->protectedMethod(); // Доступно
    }
}

$derived = new Derived();
$derived->accessProtected(); // Выведет "I'm protected"
// echo $derived->protectedVar; // Ошибка: доступ запрещен
// $derived->protectedMethod(); // Ошибка: доступ запрещен
?>
🟠Приватная (private) Приватные свойства и методы доступны только внутри класса, в котором они объявлены, и недоступны в наследниках.
<?php
class Test {
    private $privateVar = "I'm private";

    private function privateMethod() {
        echo $this->privateVar;
    }

    public function accessPrivate() {
        $this->privateMethod(); // Доступно
    }
}

$test = new Test();
$test->accessPrivate(); // Выведет "I'm private"
// echo $test->privateVar; // Ошибка: доступ запрещен
// $test->privateMethod(); // Ошибка: доступ запрещен
?>
🟠Локальная область видимости Переменные доступны только внутри функции или метода, где они объявлены. 🟠Глобальная область видимости Переменные доступны везде в скрипте, кроме внутренних областей видимости, если не используется global. 🟠Публичная область видимости Свойства и методы доступны отовсюду. 🟠Защищённая область видимости Свойства и методы доступны только внутри класса и его наследников. 🟠Приватная область видимости Свойства и методы доступны только внутри класса, в котором они объявлены. Ставь 👍 и забирай 📚 Базу знаний

Вебинар для техспециалистов, IT-директоров и CTO • Как грамотно оборудовать переговорные комнаты для онлайн-встреч и ВКС? • К
Вебинар для техспециалистов, IT-директоров и CTO • Как грамотно оборудовать переговорные комнаты для онлайн-встреч и ВКС? • Какое ПО и аппаратуру выбрать для эффективного онлайн и гибридного обучения сотрудников? • Как минимизировать ошибки при замене иностранного ПО на российское в уже оборудованных переговорных комнатах? ✅ Узнайте ответы на вебинаре МТС Линк для техспециалистов, ИТ-директоров и СТО За 30 минут разберём: - какие решения подходят под ваши задачи и бюджет; - базовую комплектацию переговорных комнат и аудиторий от МТС Линк; - схемы подключения для переговорных комнат от 2 до 20+ мест; - кейсы компаний, которые уже оснастили переговорки с МТС Линк. 👍 Бонус: дарим всем участникам ПО МТС Линк для переговорок на 1 год при покупке оборудования. Регистрируйтесь на вебинар по ссылке Зарегистрироваться #реклама 16+ mts-link.ru О рекламодателе

🤔 Что такое шифрование? Это процесс преобразования данных в защищённый формат (шифртекст) с использованием алгоритмов и ключей. Оно защищает информацию от несанкционированного доступа. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Как посчитать функцию если внутри неё много различных действий? Сложность функции можно оценить с помощью Big O (O-нотация) – это способ понять, как увеличивается время работы функции при росте входных данных. 🚩Определение сложности по Big O Константные операции (+, -, *, /, if, return) считаются за O(1). Циклы (for, while) увеличивают сложность** (например, for на N итераций → O(N)). Вложенные циклы (for внутри for) дают O(N²). Рекурсия учитывается как глубина рекурсии. 🚩Примеры расчёта сложности Простая функция (O(1)) – не зависит от входных данных
function addNumbers($a, $b) {
    return $a + $b;
}
Линейная сложность O(N) (цикл)
function printNumbers($n) {
    for ($i = 0; $i < $n; $i++) {
        echo $i;
    }
}
Квадратичная сложность O(N²) (вложенные циклы)
function printPairs($n) {
    for ($i = 0; $i < $n; $i++) {
        for ($j = 0; $j < $n; $j++) {
            echo "($i, $j) ";
        }
    }
}
Логарифмическая сложность O(log N) (деление пополам, бинарный поиск)
function binarySearch($arr, $target) {
    $left = 0;
    $right = count($arr) - 1;

    while ($left <= $right) {
        $mid = floor(($left + $right) / 2);
        
        if ($arr[$mid] == $target) {
            return $mid;
        } elseif ($arr[$mid] < $target) {
            $left = $mid + 1;
        } else {
            $right = $mid - 1;
        }
    }
    return -1;
}
Факториальная сложность O(N!) (перебор всех вариантов)
function factorial($n) {
    if ($n == 1) return 1;
    return $n * factorial($n - 1);
}
🚩Как считать сложность функции с разными действиями? Если в функции разные действия, считаем их отдельно и берём наибольшую сложность.
function complexFunction($n) {
    // O(1)
    $sum = 0;

    // O(N)
    for ($i = 0; $i < $n; $i++) {
        $sum += $i;
    }

    // O(N²)
    for ($i = 0; $i < $n; $i++) {
        for ($j = 0; $j < $n; $j++) {
            echo "Hello";
        }
    }

    return $sum;
}
Ставь 👍 и забирай 📚 Базу знаний

Ищу желающих заполнять карточки товаров на ВБ! Работа полностью на удаленке с зп до150 000 рублей в месяц. Без опыта, нужен т
Ищу желающих заполнять карточки товаров на ВБ! Работа полностью на удаленке с зп до150 000 рублей в месяц. Без опыта, нужен только телефон, занятость 3-6 часов в день. Всему обучат на бесплатном курсе и после возьму на работу: ✅ 3 дня уроков по 30 минут ✅ Домашки с проверкой и оплатой бонусами ✅ Плачу 10 тыс за каждую выполненную домашку Все кто пройдет курс, получат сертификат от школы с образовательной лицензией. ⚡ Набор заканчивается завтра. 👍 Для регистрации жмите кнопку "Зарегистрироваться" Зарегистрироваться #реклама 16+ course.wildmanager.ru О рекламодателе

🤔 Что реализует класс DateTime? 1. Класс DateTime в PHP предоставляет объектно-ориентированный способ работы с датой и временем. 2. Он позволяет создавать, изменять, форматировать и сравнивать даты. 3. Также включает функционал для работы с временными зонами через класс DateTimeZone. 4. Упрощает работу с датами благодаря методам, таким как add(), sub(), и форматированию с помощью format(). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем преимущества асинхронного шифрования? Асинхронное шифрование (асимметричная криптография) использует пару ключей: Открытый (public key) – используется для шифрования данных. Закрытый (private key) – используется для расшифровки данных. Этот метод отличается от симметричного шифрования, где один и тот же ключ используется и для шифрования, и для дешифровки. 🟠Безопасный обмен ключами - В симметричном шифровании нужно передать секретный ключ, что создаёт риск его перехвата. - В асимметричном шифровании передаётся только открытый ключ, а закрытый ключ никогда не покидает владельца. 🟠Цифровая подпись – гарантия подлинности данных - Можно подписывать данные закрытым ключом, а затем любой человек может проверить их подлинность с помощью открытого ключа.
$data = "Важное сообщение";
$privateKey = openssl_pkey_get_private(file_get_contents("private.pem"));
$publicKey = openssl_pkey_get_public(file_get_contents("public.pem"));

// Создаём подпись
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);

// Проверяем подпись
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);

echo $valid ? "Подпись верна" : "Подпись недействительна";
🟠Возможность шифрования без предварительного контакта - В симметричном шифровании обе стороны должны сначала договориться о ключе. - В асимметричном шифровании можно просто использовать открытый ключ получателя без предварительного обмена секретами. 🟠Используется в SSL/TLS для безопасного соединения - Когда вы заходите на сайт с https://, браузер использует асимметричное шифрование для установки защищённого соединения с сервером. - После этого браузер и сервер могут использовать симметричное шифрование (быстрее), но начальный обмен ключами происходит безопасно. 🚩Как это работает? 1. Браузер запрашивает у сервера его открытый ключ. 2. Шифрует случайный симметричный ключ и отправляет его серверу. 3. Сервер расшифровывает его закрытым ключом и использует для дальнейшей защиты соединения. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое DI Container? Это инструмент для управления зависимостями приложения. • Он автоматически создаёт объекты и предоставляет их другим компонентам, решая, какие зависимости инъектировать. • Контейнер упрощает реализацию DI, улучшает модульность и тестируемость приложения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какой принцип из SOLID позволяет соблюдать добавочные преобразования в работе? Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP), который является одной из пяти основных концепций SOLID — набора принципов объектно-ориентированного дизайна, предназначенных для создания более понятного, гибкого и поддерживаемого программного обеспечения. 🚩Принцип подстановки Барбары Лисков (LSP) Утверждает, что объекты класса-наследника должны быть способны заменить объекты класса-предка, не нарушая корректность работы программы. Этот принцип расширяет идею подтипов, предполагая, что подклассы должны быть взаимозаменяемы с их базовыми классами. 🚩Основные аспекты 🟠Взаимозаменяемость объекты подкласса можно использовать вместо объектов их суперкласса без изменения желаемого результата работы программы. 🟠Сохранение поведения подклассы не должны изменять поведение, заданное их базовыми классами, особенно те аспекты, которые клиенты класса ожидают.
class Vehicle {
    protected $speed = 0;

    public function accelerate($increase) {
        $this->speed += $increase;
        return $this->speed;
    }
}

class Car extends Vehicle {
    public function accelerate($increase) {
        $this->speed += $increase * 2; // Ускоряемся быстрее, но логика сохраняется
        return $this->speed;
    }
}

class Bicycle extends Vehicle {
    public function accelerate($increase) {
        $this->speed += $increase / 2; // Ускоряемся медленнее, но логика сохраняется
        return $this->speed;
    }
}
Ставь 👍 и забирай 📚 Базу знаний