从任何地方引用常见的PHP变量

时间:2013-03-11 00:18:29

标签: php model-view-controller variables global-variables constants

我正在使用PHP构建MVC以了解其工作原理。

在建立基本框架之后,我有了在我的初始化文件(index.php)中包含的文件中定义公共变量的想法,并且可以被所有后续文件访问。经过研究和大量的反复试验,我找到了实现这一目标的方法。

视觉:

##common.php
# a file of variables used in my project.

$myvar1 = value1;
$myvar2 = value2;
etc...

我最初尝试引用common.php文件中的变量,就好像它们是在使用它们的页面上定义的那样,但发现这不起作用。

视觉:

##page.php
# another page in the same project
# where common.php is included.

//get the value of $myvar1

print $myvar1; // *this does not return value1*

现在我将变量作为$GLOBALS数组的一部分引用。

##page.php
print $GLOBALS['myvar1'] // *returns value1*

这些是变量,因此我没有使用define(constant, value)

我的方法是否正确,是否有其他正确的方法可以做到这一点,或者我可能完全偏离基础?

3 个答案:

答案 0 :(得分:2)

您应该有一个名为Registry的类来存储所有共享变量。

这个类当然是所有MVC框架中共享的单例。您可以在引导函数中设置变量,如下所示:

$Registry->save('yourVar','yourValue');

然后只要你在MVC中就得到这个变量:

$Registry->get('yourVar');

当然,您需要在所有应用程序中使用此类的等级,这会带来全局状态的问题。您可以在此相关问题中找到更多信息:If Singletons are bad then why is a Service Container good?

答案 1 :(得分:0)

$ GLOBALS - 引用全局范围内可用的所有变量
简单 一个关联数组,包含对当前在脚本全局范围内定义的所有变量的引用。变量名是数组的键。

<?php
function globaltest() {
    $foo = "local variable";

    echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    echo '$foo in current scope: ' . $foo . "\n";
}

$foo = "Gaint Global content";
globaltest();
?>
  

全球范围内的$ foo:当前范围内的Gaint Global内容
$ foo:   局部变量

这是我的朋友为配置文件做的事情..

<?php
$conf['conf']['foo'] = 'this is foo';
$conf['conf']['fooB'] = 'this is fooB';

function foobar() {
    global $conf;
    var_dump($conf);
}

foobar();

&GT;

  

结果是..

     

array'conf'=&gt;       排列         'foo'=&gt;字符串'这是foo'(长度= 11)         'fooB'=&gt; string'这是fooB'(长度= 12)

并记住避免 *print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n";*

Goops!

答案 2 :(得分:-2)

如果它们是全局变量,则需要在要从中访问它们的函数中声明它们。 e.g。

来自主档

 $glbTesting = False ; 

来自您的公共文件

 function lg($txt) {
    global $glbTesting;  // this is required otherwise it cannot access the variable called externally

   if ( $glbTesting == True ) 
   {
     echo $txt."<BR>" ; 
   }
   return True;
 }