TL; DR: Скажем, у меня есть глобальный экземпляр класса
$GLOBALS['my_plugin'] = instance();
и я хочу использовать его где-нибудь еще, но я не знаю имя «my_plugin». На самом деле я делаю конечно, но мои вспомогательные файлы не делают. Для того, чтобы я использовал;
$plugin_name = 'my_plugin';
global $plugin_name, ${$plugin_name};
И это работает, я могу получить доступ к переменной $ my_plugin и использовать объект просто отлично. В основном я использую «переменные переменные», но это как-то странно. Это нормально ? Или есть лучший способ справиться с этим.
Длинная версия
// contents of plugin.php
class myplugin_class {
$_instance = null;
public $plugin_name = 'my_plugin';
public function __construct() {
$this->init();
}
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
function init() {
$this->assign_global();
$this->include_helper();
}
function assign_global() {
global $plugin_slug;
$plugin_slug = $this->plugin_name;
}
function include_helper() {
include_once('helper.php' );
}}//end class
function plug_inst() {
return myplugin_class::instance();
}
$GLOBALS['my_plugin'] = plug_inst();
helper.php
// contents of helper.php
class helper_class {
public function __construct() {
$this->some_function_that_needs_my_plugin_object();
}
function some_function_that_needs_my_plugin_object() {
global $plugin_slug, ${$plugin_slug};
print_r(${$plugin_slug});
//It gives me the $my_plugin object I want. It's all good, it works. But is it OK?
}
}
На глубине я имею в виду Глубже поиск; Я обнаружил, что а.) Даже если это работает, использование глобальных переменных в глобальных переменных не допускается. б.) Все должно быть в порядке, чтобы получить его с помощью функции.
Других решений пока нет …