@exitialis

Как вызвать метод класса, из другого класса, не создавая при этом экземпляра класса?

В общем есть метод
public function checkBanMoney()
    {
        if ($this->db_array_user['status'] == 1)
            return true;
        else return false;
    }

Он находится в классе lk_bans, который наследуется от lk_core. В классе lk_core есть метод getMoney()
public function getMoney()
    {
        $bans = new lk_bans();
        if ($bans->checkBanMoney()) { // Проверяем, забанен ли счет
            return 'Ваш счет заблокирован!';
        } else
            return $this->db_array_user['balance']; // Берем кол-во денег из массива со строкой пользователя из бд
    }

Так вот, вызвать метод checkBanMoney(), не создавая экземпляра класса? Это можно сделать, только если метод статичный? Или как?
Я сейчас только начинаю изучать ООП, поэтому и возник данный вопрос. Мне просто кажется, что создавать объект, ради использования одного метода - не очень. Заранее спасибо за все ответы и советы!
  • Вопрос задан
  • 1024 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Для начала задумайтесь, а зачем вы наследуете все от lk_core? Почитайте про принцип единой ответственности.

Логично передавать экземпляр класса lk_bans если он у вас отвечает за логику банов в конструктор класса, который его хочет использовать (принцип инверсии зависимостей). И да, опять же. Читаем принцип подстановки барбары Лисков. Родительский класс (lk_core) ничего не должен знать о своих потомках. Вообще ничего.

Вообще на начальных этапах старайтесь избегать наследования. Вот вообще. И почитайте про SOLID и GRASP. Сразу кучу вопросов для себя покроете.

Есть подборка того, что должен посмотреть каждый по-ха-пэшник. Там есть и про SOLID и про GRASP и зачем это все надо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
w999d
@w999d
Web-developer
да, static
но в этом случае вы не можете иметь $this внутри
Ответ написан
Комментировать
65536
@65536
не помню начиная с какой версии, с 5.4 вроде
if ( (new lk_bans())->checkBanMoney() )
Ответ написан
Ваш ответ на вопрос

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

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