Как перегружать методы в php?

Коллеги, приветствую!
Как перегружать методы?

Единственное что приходит в голову, это вот так.
Но это не перегрузка.
Это размножение методов!
/**
     * @param int $id
     * @return object|null
     */
    public function getOne(int $id)
    {
        return $this->findOneBy([
            "id" => $id
        ]);
    }



    /**
     * @param string $email
     * @return object|null
     */
    public function getOneA(string $email)
    {
        return $this->findOneBy([
            "email" => $email
        ]);
    }


Приятно иметь универсальную функцию, которая принимает аргументы разного типа.

$this->userRepository->getOne("vasy@mail.ru")
$this->userRepository->getOne(12)

Вопрос простецкий.
И всё же он возник в моей голове.

Например в Delphi куда лучше с этим.
Но и там я наблюдал методы тпа
MyMethod
MyMethodA
MyMethodW
  • Вопрос задан
  • 232 просмотра
Решения вопроса 2
php666
@php666
PHP-макака
Приятно иметь универсальную функцию, которая принимает аргументы разного типа.
приятно девку за сиськи щупать, а озвученное выше - лишь прямой путь к говнокоду, непрозрачной архитектуре и бесславной гибели проекта.

Вопрос не имеет смысла, ибо автор не до конца рассказал о своей проблеме, зачем ему это надо.

Примеры кода - это вообще бред чистой воды. Нет никакого смысла делать кучу методов с НЕЯВНЫМ названием или перегружать их, что бы программист и редактор вставали в ступор при виде этого кошмара.
Тут достаточно создать методы

findByEmail(string $email);
findByID($id);

и все станет на свои места.

и еще.
методы типа findByparams(), findOne() и тп - это ORM.
Это прослойка между низкоуровневым механизмом получения данных из СУБД и слоем высокого уровня
Так вот слой высокого уровня НЕ должен быть максимально гибок, не надо там иметь чудо-методы, которые сеют и жнут. Там должны быть методы findByEmail, findByName, getListByAge и т.п.

Абстрактно можно так представить данную архитектуру слоеного пирога:
User class // объект для "тупых" пользователей, что бы в ноги не выстреливали
ORM // трансляция в объекты 
mysqli/pdo user cover // возможно, какая-то более удобная обертка над драйверами mysqli/pdo
mysqli/pdo // родные библиотеки PHP для СУБД
СУБД // база данных 
файловая система и прочий АД
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
evgensenin
@evgensenin
Yii2 || Laravel, vue & nuxt
$this->userRepository->getOne("vasy@mail.ru")
$this->userRepository->getOne(12)

так проверяй ТИП параметра и от него уже делай разную логику.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы