2

我正在使用 PHP 构建一个 MVC,以了解一个 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).

我的方法是否正确,是否有另一种正确的方法可以做到这一点,或者我完全不在基地?

4

3 回答 3

2

你应该有一个类,调用Registry它来存储你所有的共享变量。

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

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

然后每当你在你的 MVC 中时,你都会得到这个变量:

$Registry->get('yourVar');

当然,你在所有应用程序中都需要这个类的事实带来了 Global State 的问题。您可以在这个相关问题中找到更多信息:如果单例不好,那么为什么服务容器是好的?

于 2013-03-11T00:41:43.593 回答
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 在全局范围内:增益 全局内容
$foo 在当前范围内:局部变量

这是我朋友对配置文件所做的..

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

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

foobar();

?>

结果是..

数组 'conf' => 数组 'foo' => 字符串 'this is foo' (length=11) 'fooB' => 字符串 'this is fooB' (length=12)

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

哎呀!

于 2013-03-11T01:07:08.197 回答
-2

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

从主文件

 $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;
 }
于 2013-03-11T00:34:20.673 回答