xolnimda
@xolnimda

Как создать класс с копией статических методов другого класса?

Есть класс Functions

У него статические методы

Нужно создать класс Html с копией методов класса Functions

class Html extends Functions {

}


Можно ли как то указать какие именно методы должен наследовать класс Html?

В классе Html не требуются все методы класса Functions
  • Вопрос задан
  • 2420 просмотров
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вот скажите, зачем вам классы? только потому что автозагрузки функций нету?

class Function {
    public static function foo() {
         return 'foo';
    }
    public static function bar() {
         return 'bar';
    }
}

class Html {
    public static function __callStatic($name, $arguments) {
         // разрешаем вызывать только foo
         if (!in_array($name, ['foo'])) {
              throw new \RuntimeException(sprintf('Unable to find method %s in class %s', $name, __CLASS__));
         }

         return call_user_func_array(['Functions', $name], $arguments);
    }
}

Html::foo() // 'foo'
Html::bar() // exception


только добавьте в phpdoc аннотации методов

либо сделайте так:
class Html {
    public static function foo() {
           return Functions::foo();
    }
}

так будет правильнее.

p.s. я не знаю зачем вы это делаете, просто знайте. Вы делаете нехорошие вещи.
Ответ написан
isa424
@isa424
Ukazhi te metody v klasse 'Functions' kotorye ne nuzhny 'private'
Ответ написан
@Kjuri
что мешает, если "не требуются все методы" и не использовать их? или есть причины, чтобы их и нельзя было использовать, даже если захочется? Как вариант - создать абстрактный суперкласс. т.е. над Functions создать еще класс, и уже на основе него создавать остальное. Определить в нем некие характеристики, которые обязательно нужны везде. А вариации уже у наследников прописывать. И Html будет дочерним элементом не Functions, а этого абстрактного суперкласса.
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Использовать трейты если версия php позволяет (с 5.4)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы