Поддержка Проблемы и решения передача параметров функции callback

  • доброго времени суток уважаемые форумчане, недавно встретился с такой загвоздкой, хочу реализовать MVC архетектуру в своем плагине, реализовал отдельные классы model view controller, но как дело дошло до реализации вывода html разметки, так все сразу же зашло в тупик.. пытаюсь создать страницу меню:

    class Simple_Shop_Controller
    {
        private $model;
        private $view;
        private $data;
    
        function __construct()
        {
            $this->model = new Simple_Shop_Model;
            $this->view = new Simple_Shop_View;
    
            $this->data = 'test';
        }
    
        function create_menu()
        {
    
            //output menu products
            add_menu_page( 'Simple Shop Products',
                'Producs',
                'manage_options',
                'post-publish-email-send/post-publish-email-send.php',
                array( $this->view, 'create_products' ),
                plugins_url( 'post-publish-email-send/image/icon.png' ),
                8 );
         }
    }

    и вот эта самая загвоздка!! как передать данные $this->data в функцию

    create_products($this->data)

    , если callback

    array( $this->view, ‘create_products’ )

    не дает такой возможности?

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Если переменная $this->data задаётся в конструкторе, то передавать её в виде параметра не нужно, можно использовать в методе create_products() как есть.

    В этом случае callback должен относиться к классу, которому принадлежит $data:

    class Simple_Shop_Controller {
        private $view;
        private $data;  // методы $view не имеют доступа к $data
    
        ...
    
        function create_menu () {
            add_menu_page( 'Simple Shop Products',
                ... // аргументы
                array($this, 'shop_page_cb'), // метод этого же класса
                ... // остальные аргументы
            );
        }
    
        // формирование страницы:
        public function shop_page_cb () {
            // здесь имеем доступ как к $view, так и к $data
            $this->view->create_products($this->data);
        }
    
    }

    Метод shop_page_cb должен быть публичным, т.к. будет вызываться функцией add_menu_page.
    Как-то так…

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «передача параметров функции callback» закрыта для новых ответов.