Php 变量不';不存在于功能之外吗?

Php 变量不';不存在于功能之外吗?,php,wordpress,variables,Php,Wordpress,Variables,您将看到Wordpress小部件代码(从Akismet获得的一点修改) 问题是$title;变量只能在一个函数中正常工作,全局变量等在这里似乎没有帮助 怎么了 function myWidget_control() { $options = $newoptions = get_option('myWidget'); if ( isset( $_POST['myWidget-submit'] ) && $_POST["myWidget-submi

您将看到Wordpress小部件代码(从Akismet获得的一点修改)

问题是$title;变量只能在一个函数中正常工作,全局变量等在这里似乎没有帮助

怎么了

 function myWidget_control() {
        $options = $newoptions = get_option('myWidget');

        if ( isset( $_POST['myWidget-submit'] ) && $_POST["myWidget-submit"] ) {
            $newoptions['title'] = strip_tags(stripslashes($_POST["myWidget-title"]));
            if ( empty($newoptions['title']) ) $newoptions['title'] = __('Spam Blocked');
        }

        if ( $options != $newoptions ) {
            $options = $newoptions;
            update_option('myWidget', $options);
        }

        $title = htmlspecialchars($options['title'], ENT_QUOTES); ?>

                <p><label for="myWidget-title"><?php _e('Title:');  ?><input style="width: 250px;" id="myWidget-title" name="myWidget-title" type="text" value="<?php echo $title; ?>" /></label></p>
                <input type="hidden" id="myWidget-submit" name="myWidget-submit" value="1" />

<?php 
}
function myWidget()
{

   echo $title; /* shows nothing but works perfectly 8 lines above! */
   echo $options['title']; /* shows nothing once again */
}
函数myWidget\u control(){
$options=$newoptions=get_选项('myWidget');
如果(设置($_POST['myWidget-submit'])和&$_POST['myWidget-submit'])){
$newoptions['title']=strip_标记(stripslashes($_POST['myWidget title]]);
if(空($newoptions['title']))$newoptions['title']=\uuuu('Spam Blocked');
}
如果($options!=$newoptions){
$options=$newoptions;
更新_选项('myWidget',$options);
}
$title=htmlspecialchars($options['title',ENT_QUOTES);?>

这些变量是在函数本身中定义的,因此除非您告诉它们,否则无法在这些函数之外访问。请尝试全局调用它们

function myWidget_control() {
     global $title, $options;
     [yourcode]
}
function myWidget() {
     global $title, $options;

   echo $title;
   echo $options['title'];
}


您可能不需要在这两个函数中对它们进行全局化,但我认为您需要这样做。

这些变量是在函数本身中定义的,因此除非您告诉它们,否则无法在这些函数之外访问它们。尝试一下环球旅行吧

function myWidget_control() {
     global $title, $options;
     [yourcode]
}
function myWidget() {
     global $title, $options;

   echo $title;
   echo $options['title'];
}


您可能不需要在这两个函数中对它们进行全局化,但我认为您需要这样做。

范围仅限于定义变量的位置;在本例中,使用
myWidget\u control()
方法。参见

范围仅限于定义变量的位置;在本例中,使用
myWidget\u control()
方法。请参见

$title是在myWidget_control()函数的范围内定义的,因此仅在此处可用

如果您需要它在myWidget()中可用,它也必须在那里创建/检索,我建议再次调用get_选项(“myWidget”)来检索它

function myWidget() {
   $options = get_option('myWidget');
   $title = htmlspecialchars($options['title'], ENT_QUOTES);

   echo $title;
}

$title是在myWidget_control()函数的范围内定义的,因此仅在此处可用

如果您需要它在myWidget()中可用,它也必须在那里创建/检索,我建议再次调用get_选项(“myWidget”)来检索它

function myWidget() {
   $options = get_option('myWidget');
   $title = htmlspecialchars($options['title'], ENT_QUOTES);

   echo $title;
}

按预期工作-您没有声明任何全局变量。看,但当我声明它不会改变任何事情。我宣布全球$title;在第一个函数中,在第二个函数中,在这两个函数中,都不会发生任何事情;它并不包括来自任何地方的所有变量。关键字“global”不会将变量“声明”为全局变量。它只是使函数可以使用已经全局的变量;函数中定义的变量不在全局范围内。按预期工作-您没有声明任何全局变量。看,但当我声明它不会改变任何事情。我宣布全球$title;在第一个函数中,在第二个函数中,在这两个函数中,都不会发生任何事情;它并不包括来自任何地方的所有变量。关键字“global”不会将变量“声明”为全局变量。它只是使函数可以使用已经全局的变量;函数中定义的变量不在全局范围内。不起作用,事实上,它完全破坏了整个小部件。天哪,我过去喜欢Wordpress,但现在讨厌Wordpress。鉴于在第一个函数中以正确的方式检索值,在第二个函数中使用globals是不必要的。不起作用,事实上,它完全破坏了整个小部件。天哪,我过去喜欢Wordpress,但现在讨厌Wordpress。鉴于在第一个函数中以正确的方式检索值,在第二个函数中不需要使用全局变量。谢谢。只有这个解决方案有效。全球的-不。你能解释一下为什么全球的没有吗?因为它位于数组?@fomicz中,
global
关键字允许访问全局范围内的变量(它不会以任何方式将变量放入全局范围)<代码>$options
未在全局范围中定义,而是在函数范围中定义。因此,
global
关键字对其没有影响。@fomicz Globals可以工作,但变量的初始声明必须高于所有其他用途的级别(范围)。例如,您需要在函数之外声明$title,并使用'global$title;'在每个希望访问它的函数中。全球人通常都不赞成,因为通常有更好的方法来处理这种情况。谢谢。只有这个解决方案有效。全球的-不。你能解释一下为什么全球的没有吗?因为它位于数组?@fomicz中,
global
关键字允许访问全局范围内的变量(它不会以任何方式将变量放入全局范围)<代码>$options未在全局范围中定义,而是在函数范围中定义。因此,
global
关键字对其没有影响。@fomicz Globals可以工作,但变量的初始声明必须高于所有其他用途的级别(范围)。例如,您需要在函数之外声明$title,并使用'global$title;'在每个希望访问它的函数中。全球人通常都不赞成,因为通常有更好的方法来处理这种情况。