我正在使用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)
。
我的方法是否正确,是否有其他正确的方法可以做到这一点,或者我可能完全偏离基础?
答案 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;
}