我想使用类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
有人能解决这个问题吗?
非常感谢
最合适的回答,由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
}
}