За последние 24 часа нас посетил 36781 программист и 7753 робота. Сейчас ищут 1722 программиста ...

Вопрос по реализации классов

Тема в разделе "PHP для новичков", создана пользователем Yankovitz, 17 апр 2023.

  1. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Добрый день. Вопрос такого рода. Мне необходимо написать класс, который позволил бы избежать многократного прямого вызовова методов. Метод как-бы заранее предопределён, а вот какие классы работают с этим методом, могут быть произвольными.

    Вместо

    PHP:
    1. echo B::enquqe();
    2. echo C::enquqe();
    3. echo D::enquqe();
    4. echo E::enquqe();
    5. echo F::enquqe();
    6. ... количество классов может быт неограниченным
    хотелось бы просто
    echo A::walkAllEnquqe();
    здесь он пробегает все классы с методом enquqe.

    Возможно ли вообще такое в php?

    Что-то типа:

    PHP:
    1. class AppClass1 {
    2.     function __constructor() {}
    3. }
    PHP:
    1. class CustomClassName extend AppClass1 {
    2.     static $text = 'Hello!';
    3.  
    4.     static function doSomething() {
    5.         return self::$text;
    6.     }
    7. }
    PHP:
    1. class AppClass2 extend AppClass1 {
    2.     function __constructor() {
    3.        
    4.       $classes = get_classes_of_child_class_AppClass1();
    5.       foreach( $classes as $class ) {
    6.          $class::doSomething();
    7.       }
    8.    }
    9. }
    PHP:
    1. echo new AppClass2();
    2. // output:: Hello! How are you?
    Скорее всего это какая-то фигня и так не делается. Просто, не у кого спросить, такое реализуемо или нет. Заранее спасибо
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    Ты сейчас изобретаешь полиморфизм ))) Откажись от static, всего делов.
    подозреваю, что тебе нужно что-то вроде

    PHP:
    1. if ($object instanceof ParentClass) $object->doIt();
    Но да, через $className::method() наверное должно работать. Ну или через call_user_func(), лень проверять. Ты сам пробовал или сразу на форум побежал?
    --- Добавлено ---
    Почитай также про get_declared_classes(), instanceof, is_subclass_of() - всё на PHP.NET
     
  3. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    ТС, гляньте PHP: Traits - Manual, возможно, как раз этим хотите ногу себе отстрелить.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Вообще, с PSR это возможно. Можно пробежаться по файлам какого-либо каталога, и преобразовать их имена в классы, потому что там есть простые правила, устанавливающие однозначное соответствие. Я любитель таких трюков.
    --- Добавлено ---
    Вот, к примеру, реализация этой идеи. https://packagist.org/packages/haydenpierce/class-finder