Проблема доступа к объектам и включает внешние функции изнутри функции - PullRequest
0 голосов
/ 29 августа 2011

В настоящее время я создаю плагин 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'));
}

Как вы можете видеть, я уже создал объект панели, и если я выгружаю содержимое перед функцией, я получаю правильный вывод. Тем не менее, все страницы жалуются, что панель не является допустимой переменной или объектом. Что может быть причиной этого?

Я могу решить это простым добавлением:

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

Внутри функции configurePages. Но я не должен был этого делать. У меня та же проблема с включениями, они просто не распознаются внутри функций. Я был бы очень рад, если бы кто-то мог поделиться некоторой проницательностью в этом вопросе и возможно, как решить его.

Заранее спасибо! // Jonathan

1 Ответ

1 голос
/ 29 августа 2011

Вы не можете получить доступ к $panel из функции, так как ваша функция ищет переменную $panel в своей локальной области, хотя она фактически определена в глобальной области.

Oneспособ сделать переменную доступной внутри функции:

function configurePages() {
  global $panel;
  …
}

Подробнее о области действия переменных можно узнать здесь: http://php.net/manual/en/language.variables.scope.php

...