За последние 24 часа нас посетили 63216 программистов и 1740 роботов. Сейчас ищут 936 программистов ...

Как запустить вместо одной функции другую?

Тема в разделе "PHP для новичков", создана пользователем lamok, 3 авг 2017.

  1. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Как запустить вместо одной функции другую?
    PHP:
    1. class A {
    2.  
    3. function addComment() {
    4.  
    5. идет код добавления...
    6. }
    7. }
    8.  
    9. class B {
    10. function addMail() {
    11. ...
    12. }
    13. }
    14.  
    15. $primer = new A();
    16. $primer->addComment()
    Как сделать так чтобы при запуске функции А->addComment() выполнился не код этой функции а запустилась функция из другого класса B->addMail()?
     
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Я лично с функциями не дружу пока, надо разузнать, буду следить за темой)
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. function addComment() {
    2.   $b = new B;
    3.   return $b->addMail();
    4. }
     
  4. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Обзервер же не подойдет? Он же может только уведомить только о том что произошло событие (запущена функция)?
    --- Добавлено ---
    Какую функцию запускать выбирается автоматически либо оригинал либо другая функция.

    Делаю аля систему плагинов, плагин регистрируется вместо какой функции ему запуститься.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    вы похоже пытаетесь сделать что то похожее на интерфейсы (interface)?
    поищите тут на форуме надавно был вопрос про них ....
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Автор, а теперь давай с самого начала. Какую проблему пытаешься решить? А то на лицо "проблема X-Y". Именно проблему изначальную, а не то, как ты ее пытаешься решать.
     
  7. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Я пытаюсь создать систему плагинов.
    т.е. ели плагин регистрируется вместо какой функции (указывается вместо какой) должна выполниться именно функция из плагина.
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Имя функции можно записать в переменную, и использовать переменую для вызова функции
    PHP:
    1. $var = "myFunc";
    2. $var();
     
    Maputo нравится это.
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Окей, осваивай делегаты. В PHP они представлены в виде Closure-объектов. То есть объекты-функции, как в JS. Их можно присваивать переменным как значения. Меняешь значение такой переменной - меняешь то, что будет вызвано:

    PHP:
    1. <?php
    2.  
    3. $call_me = null;
    4.  
    5. $first_closure = function(){
    6.     echo 'First!<br>';
    7. };
    8.  
    9. $second_closure = function(){
    10.     echo 'Second!<br>';
    11. };
    12.  
    13. //Присваиваем первый Closure переменной $call_me и вызываем ее
    14. $call_me = $first_closure;
    15. $call_me();
    16. //Теперь заменяем на второй и вызываем
    17. $call_me = $second_closure;
    18. $call_me();
    19. //Вуаля! "точка вызова" одна, результаты разные.
     
  10. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Подскажите а как в WordPress организована система плагинов? В таком же виде или другом?
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Там имена функция собираются в массив, и потом поочередно выполняются
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    https://php.ru/forum/threads/interface-class.64494/
    это ? дык интеры чтобы прогеры не ошибались, а когда один кодишь на* они не нужны
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Сегодня один, а завтра не один.