Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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 Wordpress寄存器_激活_hook()+;全局变量+;类:无法重新声明_Php_Wordpress - Fatal编程技术网

Php Wordpress寄存器_激活_hook()+;全局变量+;类:无法重新声明

Php Wordpress寄存器_激活_hook()+;全局变量+;类:无法重新声明,php,wordpress,Php,Wordpress,我正在编写我的第一个wordpress插件,我正在尝试创建一个在插件激活时调用的函数 现在看起来是这样的: classthumbsup{ ... } 全球$thumbs; 函数thumbs\u install(){ //全球$thumbs; $thumbs=new ThumbsUp();/*第160行*/ $thumbs->installThumbsUp(); }/*第162行*/ //插件激活时->安装。 注册激活钩子(uuu文件,'thumbs\u安装'); 但当我激活插件时,我会出现以下

我正在编写我的第一个wordpress插件,我正在尝试创建一个在插件激活时调用的函数

现在看起来是这样的:

classthumbsup{
...
}
全球$thumbs;
函数thumbs\u install(){
//全球$thumbs;
$thumbs=new ThumbsUp();/*第160行*/
$thumbs->installThumbsUp();
}/*第162行*/
//插件激活时->安装。
注册激活钩子(uuu文件,'thumbs\u安装');
但当我激活插件时,我会出现以下错误:

无法激活插件,因为它触发了致命错误

致命错误:无法在第162行的
/dev/site/wp content/plugins/thumbs-up/thumbs.php:160
中重新声明
thumbs\u install()
(以前在
/dev/site/wp content/plugins/thumbs-up/thumbs-up.php中声明)

我已经在谷歌上搜索过了,它被当作一个变量范围的问题来讨论,但我找不到任何答案的例子,我的php不够强大,无法将讨论转化为代码

以下是:

要在由
register\u activation\u hook()
调用的函数内引用的任何全局变量必须在插件主体内(即在该函数外)显式声明为全局变量。插件文件在另一个函数中的激活点处被
include()
-ed插入,这与插件文件仅被
include()
-ed.Phew激活时不同。有点奇怪,让你的头左右,但我们去


我以为我已经做了所描述的,但我仍然得到了错误。我还尝试了所有其他组合,我可以将全局
$thumbs
..

对这个问题有一个更一般的答案:从注册了
寄存器激活挂钩的函数运行的代码中出现的每一个错误都将显示为“
无法重新声明…”
”而不是实际的错误。我怀疑这是因为WordPress调用激活钩子时包含插件文件的方式。

这个问题有一个更一般的答案:从注册了
注册激活钩子的函数运行的代码中出现的每个错误都将显示为“
无法重新声明…”
”而不是实际的错误。我怀疑这是因为WordPress调用激活钩子时包含插件文件的方式。

注意:如果您通过搜索引擎来到这里查询WordPress的
register\u activation\u hook()
global
变量的结果,请跳到这个答案的第二部分


此错误消息背后的基本原理是首先创建
thumbs\u install
名称,而
include()
ed一次,然后是第二次

其中一次,它是
include()
ed在
activate\u plugin()
from的范围内;另一个很有可能是您在做的:Wordpress不包含任何尚未激活的插件,只在
activate\u plugin()
中包含一次插件文件

此外,我无法用您在问题中粘贴的代码重现问题,但我在以下版本的
ThumbsUp
类中得到了该错误:

classthumbsup{
函数installThumbsUp(){
包括(文件);
}
}
但是,由于您没有与我们共享您的
ThumbsUp
课程的代码,因此我无法在这一直接问题上进一步帮助您

值得注意的是,在
activate\u plugin()
函数中首次(激活前)包含插件是为了防止Wordpress因未激活插件而崩溃;因此,额外的
include()
require()
很可能发生在插件代码的其他地方(不一定在本地范围内)


关于在传递给
register\u activation\u hook()
的回调函数中使用
global
变量;本质上,因为插件的第一个
include()
(在激活期间)发生在函数()的范围内,所以有必要在插件的每个访问位置声明这些变量
global

这意味着:<强>它们需要在插件文件的范围内显式设置<代码>全局< /代码> <>强>(通常考虑变量已经是全局的)。< /P> 这是因为在第一次激活期间,所述变量定义在

activate\u plugin()
的范围内,除非显式设置为全局,否则它们将不存在于全局范围内

例如:

<?php
global $myvar;
$myvar = 'some value';

function using_myvar() {
    global $myvar;
    some_processing_with($myvar);
}

register_activation_hook(__FILE__, 'using_myvar');
注意:如果您是通过搜索引擎来到这里查询Wordpress的
注册激活钩子()
全局变量的结果,请跳到此答案的第二部分


此错误消息背后的基本原理是首先创建
thumbs\u install
名称,而
include()
ed一次,然后是第二次

其中一次,它是
include()
ed在
activate\u plugin()
from的范围内;另一个很有可能是您在做的:Wordpress不包含任何尚未激活的插件,只在
activate\u plugin()
中包含一次插件文件

此外,我无法用您在问题中粘贴的代码重现问题,但我在以下版本的
ThumbsUp
类中得到了该错误:

classthumbsup{
函数installThumbsUp(){
包括(文件);
}
}
但是,由于您没有与我们共享您的
ThumbsUp
课程的代码,因此我无法在这一直接问题上进一步帮助您