Global variables and re-use

时间:2020-06-30 作者:Tetragrammaton

目前我正在编写WordPress插件。我会尝试在不同的页面上重用函数中的变量。假设我将创建如下函数:

function test() {
   global $hello;
   $hello = \'hello world\';
}

add_action( \'wp_head\', \'test\' );
我现在可以在其他页面上执行以下操作:echo $hello; 这对我很有用,因为我可以通过插件获取课程设置等信息$course_settings, 无需重写整个代码。

我不确定这样做对不对?因为其他插件可以重写我的变量。

2 个回复
最合适的回答,由SO网友:mozboz 整理而成

在一般编程中,globals是不好的做法:

你不能轻易地在一个地方看到全局函数的用法,而看到所有其他用法,例如在哪里设置或稍后将读取全局函数

您可以做一些事情来尽可能安全和无bug地使用globals,以下是一些建议:

给您的global起一个非常独特的描述性名称。E、 g.$mozboz\\u highscoreplugin\\u分数。这可以防止其他代码意外覆盖您的gglobal时可能发生的冲突

记录全球某处的使用情况!E、 g.在插件顶部,描述它使用的globals以及如何使用

如果你是一个更高级的PHP程序员,你可能想尝试做一些更聪明的事情,比如把所有变量放在一个带有数组的全局变量中,或者甚至放在一个对数据有更多控制的类中,这样可能更容易调试。例如:

代替:

global $my_plugin_variable1;
global $my_plugin_variable2;
$foo = $my_plugin_variable1 + $my_plugin_variable2;
试试看:

global $my_plugin_datastore;
$foo = $my_plugin_datastore[\'var1\'] + my_plugin_datastore[\'var2\']
类和单例的使用更高级,但可能会给您带来一些好处,因为它允许您包装和传递插件程序中的所有函数和变量。E、 g.在给出的示例中,您可能希望能够调用test() 从任何地方,在这种情况下,从任何地方都能做到这一点可能会很好:

$myplugin_object = getPluginInstance();
$foo = $myplugin_object->test();

SO网友:DevelJoe

如果你已经在全局范围内使用了你的变量,你也应该在全局范围内定义它,而不是在函数内。

然后,您可以简单地将定义全局变量(让我们称之为源脚本)的php文件包含到您想要使用的脚本中,并使用一个简单的includerequire 使用前的语句。我的插件也正是这样工作的。但是,通过如下方式定义这些全局使用的自定义变量,确保u为它们添加前缀:

$your_plugin_name_variable

避免与其他wp globals或来自其他插件的其他globals发生命名冲突。

如果全局变量有一个常量内容,也可以在类中将其定义为public static 变量如果您想在不同的页面上加载多个全局变量/函数,尤其建议您这样做。然后,它们都将安全地存储在类名下,您无需担心它们的命名冲突(只需确保您的类名是唯一的)。然后,您可以在脚本中简单地使用它们,而无需实例化类对象(这就是为什么您可以将它们定义为公共静态)。

如果您的global有一个特定的动态内容,而我解释的第一种方法不适合该内容,请考虑将其以键值样式存储在数据库中。然后,源脚本只需从数据库中检索其值,然后将检索到的值与全局变量的名称相关联,并将该源脚本包含在使用它的任何地方,如命题1所示。

我建议您使用这些解决方案中的一种,实际上,我将它们与插件一起使用,以实现各自的复杂功能。

相关推荐

子主题不覆盖父主题php文件

我不熟悉Wordpress和儿童主题的工作原理。我的子主题我正在尝试覆盖子目录中的两个文件。我复制了父文件并在子主题中编辑了它们,但更改不会反映在父主题中。我正在尝试更改功能图像大小的代码。我成功地在parent中更改了代码以测试它,并且它正常工作。但子主题并没有覆盖它。/public_html/wp-content/themes/sahifa/framework/functions/theme-functions.php /public_html/wp-content/themes/sa