如何在ADD_ACTION2NDE参数中放置来自另一个类的函数?

时间:2017-08-29 作者:juRioqs75

我想使用类B中的一个函数作为类a的add\\u action()函数的第二个参数,下面是我现在尝试的内容(我只是在类a中创建了一个类B的实例):

class A
{

    public function __construct()

    {

        include_once plugin_dir_path( __FILE__ ).\'/classB.php\';

        $classB= new classB();

        add_action(\'admin_menu\', array($this, \'add_admin_menu\'), 20);

    }



    public function add_admin_menu()

    {

            add_menu_page(\'Plugin Back End\', \'Back End Plugin\', \'manage_options\', \'backend\', array($this, \'menu_html\'));


            $hook_heb = add_submenu_page(\'backend\', \'hebergements\', \'hebergements\', \'manage_options\', \'hebergements\', array($this, \'menu_hebergements\'));

            add_action(\'load-\'.$hook_heb, array($this, \'process_action_heb\'));

    }

}
B类。php

class Hebergement

{



    public function process_action_heb()

    {

        if (isset($_POST[\'send_hebergement\'])) {

            $this->send_hebergement();

        }

    }
    ............;;
在wordpress管理面板中,我发现以下错误:

类“Other\\u Part”在C:\\xampp\\htdocs\\wordpress\\wp includes\\class wp hook中没有方法“process\\u action\\u heb”。php在线298

有人能解决这个问题吗?

非常感谢

1 个回复
最合适的回答,由SO网友:Nathan Johnson 整理而成

问题是您试图回调process_action_heb 方法来自$this (又名A类)它不是A类的方法,而是B类的方法。

我会使用依赖注入来解决这个问题,尽管您可以使用类似于您正在使用的方法。

//* plugin.php
include_once PATH_TO . \'/classA.php\';
include_once PATH_TO . \'/classB.php\';

$classB = new classB();
$classA = new classA( $classB );

add_action( \'hookA\', [ $classA, \'some_method\' ], 20 );

//* class-a.php
class A {
  protected $classB;
  public function __construct( $classB ) {
    $this->classB = $classB;
  }
  public function some_method() {
    //* Do something

    //* And add action to classB::some_method
    add_action( \'hookB\', [ $this->classB, \'some_method\' ] );
  }
}

//* class-b.php
class B {
  public function some_method() {
    //* This code will run on the hookB hook
  }
}

结束

相关推荐

Virtual Pages plugins

我很难让插件正常工作Virtual Pages (WordPress插件可简化虚拟页面的创建)我确实进行了编辑,根据查询创建了一个循环。add_action( \'gm_virtual_pages\', function( $controller ) { /* Creating virtuals pages for companies */ $args = array( \'post_type\' => array(\'companies\',), \'post_status\'