Plugins 从函数内部访问对象和包含外部函数时出现问题

Plugins 从函数内部访问对象和包含外部函数时出现问题,plugins,wordpress,Plugins,Wordpress,我目前正在为一位客户构建Wordpress插件,在从函数内部访问函数外部创建的变量和对象时遇到一些问题。例如,这是我的代码: // Include files: require_once('classes/panel.inc.php'); $panel = new AdminPanel(); // Actions & Options: add_action('admin_menu', 'configurePages'); // Configure pages: function co

我目前正在为一位客户构建Wordpress插件,在从函数内部访问函数外部创建的变量和对象时遇到一些问题。例如,这是我的代码:

// Include files:
require_once('classes/panel.inc.php');
$panel = new AdminPanel();

// Actions & Options:
add_action('admin_menu', 'configurePages');

// Configure pages:
function configurePages(){

    // Boats:
    add_menu_page(__('Båtar','admin-main'), __('Båtar','boats'), 'manage_options', 'boats', array($panel, 'displayBoatManager'));
    add_submenu_page('boats', __('Sök båtar','search-boats'), __('Sök objekt','search-boats'), 'manage_options', 'search-boats', array($panel, 'displayBoatSearch'));
    add_submenu_page('boats', __('Hantera utrustning','manage-equipment'), __('Hantera utrustning','manage-equipment'), 'manage_options', 'manage-equipment', array($panel, 'displayEquipmentManager'));

    // Customers:
    add_menu_page(__('Kunder','admin-main'), __('Kunder','boats'), 'manage_options', 'customers', array($panel, 'displayCustomerManager'));
    add_submenu_page('customers', __('Sök kunder','search-customers'), __('Sök kunder','search-customers'), 'manage_options', 'search-customers', array($panel, 'displayCustomerSearch'));
}
正如您所见,我已经创建了一个panel对象,如果我在函数之前转储内容,我将获得正确的输出。尽管如此,所有页面都抱怨panel既不是有效变量也不是对象。这可能是什么原因造成的

我可以通过简单地添加以下内容来解决此问题:

require_once('classes/panel.inc.php');
$panel = new AdminPanel();
在configurePages函数中。但我不应该这样做。 我对include也有同样的问题,它们在函数内部不会被识别。如果有人能分享一些关于这个问题的见解和可能的解决方法,我将非常高兴

提前谢谢//
Jonathan

您无法从函数中访问
$panel
,因为您的函数正在其局部范围中查找变量
$panel
,而实际上该变量已在全局范围中定义

使变量在函数中可用的一种方法是

function configurePages() {
  global $panel;
  …
}

有关变量范围的更多信息,请参见此处:

谢谢,这对变量非常有效,但我不确定如何将其应用于任何类型的函数,如“require\u once”或“include\u once”。我想将配置放在另一个文件中,但仍然能够从所有函数访问它。你知道怎么做吗?没有文件内容很难说,但是我假设你再次尝试访问函数中的一些配置变量,这些变量是在全局范围内包含的文件中定义的。如果是这种情况,您还必须为这些变量调用
global
global$panel,$config
$config
已在包含中定义。我尝试这样做,但似乎没有帮助。在该文件中创建的任何变量似乎都无法触及。我希望能让它工作,但我想我会把它全部放在一个文件中。我设法让include工作,但我必须先将变量设置为全局变量,然后在配置文件中设置它们的内容,然后在我需要使用它们的函数中再次将它们设置为include。谢谢你的帮助,问题解决了!