2011-03-31 48 views
1

可能重复:
Global variables in PHPPHP全局变量的函数没有找到

我有一个像

global $var1; 

function func1() { 
    $var1->something(); // $var1 not found ... why? 
} 

PHP脚本成才必须做全球$ VAR1每功能?

+2

严重的是,你们是否曾经在**之前搜索**,询问您的问题,就像您要求在http://stackoverflow.com/questions/ask-advice中所做的那样。同样的事情只是在9小时前被问到,而且这也是很多重复的事情。请在提问前做好功课。 – Gordon 2011-03-31 07:06:57

回答

4

我必须做全球$ VAR1在每一个功能呢?

是的。在PHP

功能得到自己的变量范围。获取全局范围内变量的唯一方法是直接请求变量。

我相信你会明白这是如何造成难以阅读的面条代码。尽可能避免使用全局变量。代替

如果您正在构建面向对象代码,请考虑使用a Registry(命名空间集合)和/或Dependency Injection(在构造函数中传递新对象所需的对象)。

+4

我宁愿放弃注册表中的全球命名空间,因为这是它是什么,如果你静态访问它。与使用'$ GLOBALS'或使用'global'关键字导入数组相同的问题。见http://stackoverflow.com/questions/5283102/how-is-testing-registry-pattern-or-singleton-hard-in-php/5283151#5283151 – Gordon 2011-03-31 07:10:14

1

它是周围的其他方式。

$var1 = new StdClass(); 

function func1() { 
    global $var1 
    $var1->something(); // $var1 not found ... why? 
} 
` 

确实的,您需要在您声明的每个函数中以这种方式调用它。