在 WP 插件页面上调用非对象的成员函数

Call to a member function on a non-object on WP Plugin Page

我有以下代码以 Wordpress 插件页面的形式连接到 AWS PHP SDK。我在最后一个函数 (bz_page_file_path) 中尝试使用 $MTurk 变量时收到 Call to a member function on a non-object 错误。我尝试过各种解决方案,例如 $global variables,但没有成功。我还确认,如果我将 bz_page_file_path 的内容移动到构造函数中,代码确实有效(因此它似乎可能是某种范围界定问题)。我该怎么做才能将其正确传递给函数?

<?php

class BZ_NamePicker {

  // Constructor
  function __construct() {

    require_once dirname(__FILE__) . '/aws-autoloader.php';

    $MTurk = new Aws\MTurk\MTurkClient([
      ...
    ]);

    add_action( 'admin_menu', array( $this, 'bz_add_menu' ));
  }


  /* Action to load admin menu */

  function bz_add_menu() {

    add_menu_page('NamePicker', 'NamePicker', 'manage_options', 'namepicker-dashboard',
      array(__CLASS__, 'bz_page_file_path'),
      'dashicons-sticky','3');
  }

  /* Action to load content on admin webpage */

  function bz_page_file_path() {

    $accountBalance = $MTurk->getAccountBalance([]);
    echo $accountBalance['AvailableBalance'];
  }


}

new BZ_NamePicker();
<?php

class BZ_NamePicker {

  // Constructor
  function __construct() {
     global $MTurk;
    require_once dirname(__FILE__) . '/aws-autoloader.php';

    $MTurk = new Aws\MTurk\MTurkClient([
      ...
    ]);

    add_action( 'admin_menu', array( $this, 'bz_add_menu' ));
  }


  /* Action to load admin menu */

  function bz_add_menu() {

    add_menu_page('NamePicker', 'NamePicker', 'manage_options', 'namepicker-dashboard',
      array(__CLASS__, 'bz_page_file_path'),
      'dashicons-sticky','3');
  }

  /* Action to load content on admin webpage */

  function bz_page_file_path() {
    global $MTurk;
    $accountBalance = $MTurk->getAccountBalance([]);
    echo $accountBalance['AvailableBalance'];
  }


}

new BZ_NamePicker();

您需要在要访问它的函数中调用 class 作为全局对象