Php wordpress mu中的函数文件、插件和主题范围

Php wordpress mu中的函数文件、插件和主题范围,php,plugins,wordpress,Php,Plugins,Wordpress,我有一个插件,它声明并连接了以下相关问题中描述的最佳实践: 所以看起来(柏拉图式的)是这样的: if ( !class_exists( 'Foo' ) ) { class Foo { ... public function do_stuff() { // does stuff } } } if ( class_exists( 'Foo' ) ) { $MyFoo = new Foo(); } 现在,如果我从一个主题文件调用$MyFoo->do

我有一个插件,它声明并连接了以下相关问题中描述的最佳实践:

所以看起来(柏拉图式的)是这样的:

if ( !class_exists( 'Foo' ) ) {
  class Foo {
    ...
    public function do_stuff() {
      // does stuff
    }
  }
}

if ( class_exists( 'Foo' ) ) {
  $MyFoo = new Foo();
}
现在,如果我从一个主题文件调用$MyFoo->do_stuff(),比如single.php,$MyFoo实际上执行_stuff,我会在页面中看到输出

但是,如果我在functions.php中编写一个函数,希望调用$MyFoo->do_stuff(),然后从single.php调用该函数,则找不到该对象。总之

作品:

in themes/my_theme/single.php:
  if (isset($MyFoo))
    $MyFoo->do_stuff();
不起作用:

in themes/my_theme/functions.php:
  function do_some_foo_stuff() {
    ...
    if (isset($MyFoo)) {
       $MyFoo->do_stuff();
    } else {
       echo "no MyFoo set";
    }
    ...
  }
 themes/my_theme/single.php:
   if (isset($MyFoo))
     do_some_foo_stuff();
输出->“无MyFoo设置”

这可能完全不令人惊讶,但这是我需要/想要做的事情,所以如果有人能解释发生了什么,我将不胜感激。为什么主题的函数文件(或者mu插件中的其他插件文件)找不到$MyFoo对象

请仔细阅读。变量
$MyFoo
在函数
do\u some\u foo\u stuff()
中不可访问,除非先声明为全局变量

function do_some_foo_stuff()
{
    global $MyFoo;
    ...
}

谢谢,这是一个有效的解决方案,但我想我仍然不太了解WP架构,无法理解为什么插件变量在主题描述文件(如single.php和home.php)中可以直接访问(没有全局声明),但在functions.php文件中不在范围之内。对于变量作用域的参考资料,您是否有任何特定于wordpress的建议?这与wordpress无关,而与PHP变量作用域有关。主题文件只是脚本中包含的PHP文件,可以访问父范围内的变量。就我个人而言,我尽量避免通俗易懂——我认为一个单身班更适合你的目的-