Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数中使用PHP类方法而不使用全局变量?_Php_Wordpress - Fatal编程技术网

如何在函数中使用PHP类方法而不使用全局变量?

如何在函数中使用PHP类方法而不使用全局变量?,php,wordpress,Php,Wordpress,我正在向Wordpress添加主题选项,为此我有一个theme\u options类 在类中,我有get\u field($field)方法来获取主题选项 我想创建一个函数,以便在我正在构建的WordPress主题中使用它来获取主题选项,但我不想使用全局变量 类主题\u选项 { 公共函数构造() { } 公共函数get_字段($field) { //获取主题选项的逻辑 返回$field; } } 现在我需要使用global$Theme\u Options来创建get\u field()函数 $

我正在向Wordpress添加主题选项,为此我有一个
theme\u options

在类中,我有
get\u field($field)
方法来获取主题选项

我想创建一个函数,以便在我正在构建的WordPress主题中使用它来获取主题选项,但我不想使用全局变量

类主题\u选项
{
公共函数构造()
{
}
公共函数get_字段($field)
{
//获取主题选项的逻辑
返回$field;
}
}
现在我需要使用
global$Theme\u Options
来创建
get\u field()
函数

$Theme\u Options=新的主题选项();
函数get_字段($field){
全局$Theme_选项
返回$Theme\u Options->get\u字段($field);
}

如何创建
get_field()
函数而不在该函数中使用全局变量?

整个设计相当奇怪,但考虑到您使用的限制,类似于单例的东西可能会起作用

class ThemeOptions
{

    private static $instance;

    private function __construct()
    {
    }

    public static function getInstance() {

        if (self::$instance === null) {
            self:$instance = new self();
        }

        return self::$instance;
    }

    public function getField($field) 
    {
        // logic to get the theme option
        return $field;
    }
}

$ThemeOptions = ThemeOptions::getInstance();

// do whatever initialization you want to $ThemeOptions;


function get_field($field) {
    return ThemeOptions::getInstance()->getField($field);
}
A不是一个很好的设计模式,但我知道为WP开发比通常更受限制。单例实例存在于全局空间中,因为它存储在静态属性中

您不能多次初始化该类,因为私有构造函数强制执行
getInstance()
,以确保任何时候都不会有多个
Theme\u选项
实例


您可以在插件初始化期间初始化
themeopions
对象,并且可以在模板中使用
get\u field()
函数。由于模板呈现是在插件初始化之后进行的,那么您的
操作
实例就会被适当地填充。

获取字段
函数中创建一个实例?。。。或者将对象传递到函数()中。该类已经实例化,我已经传递了一些数据。我不能再这样做了。它只能实例化一次,我必须在我的主题中的每个文件中都包含这个类。