我在这里缺少一些基本的东西。我们需要访问函数do_stuff中设置的变量$ myvar。这是函数存在的类的通用片段。该类及其功能都可以正常工作。
class TestClass {
public function do_stuff() {
global $myvar;
$myvar= 'the value we want';
}
}
现在,稍后就会出现问题......
$TestClass = new TestClass();
$TestClass->do_stuff();
function get_var() {
global $myvar;
echo $myvar; // here the value does NOT exist
}
get_var();
echo $myvar; // but here the value DOES exist
那么当我们在函数外部访问变量时,我错过了为什么变量存在,但是当访问函数内部时它不存在?
注意:这是我们正在做的简化版本,所以虽然这个例子很简单,但它说明了我们面临的问题。我也明白许多人不喜欢全局变量。鉴于使用遗留代码和框架,我们需要解决这个特定问题。
谢谢你的帮助!
答案 0 :(得分:2)
class TestClass {
public function do_stuff() {
global $myvar;
$myvar= 'the value we want';
}
}
function get_var() {
global $myvar;
echo $myvar; // here the value does NOT exist
}
get_var();
echo $myvar; // but here the value DOES exist
如果您真正使用该类并执行它,那将是您所拥有的。
class TestClass {
public function do_stuff() {
global $myvar;
$myvar= 'the value we want';
}
}
function get_var() {
global $myvar;
echo $myvar; // here the value does NOT exist
}
$TestClass = new TestClass();
$TestClass->do_stuff();
get_var();
echo $myvar;
应该回应你想要的东西。操作顺序仍然很重要,仅仅是因为某个类被放置在一个类中并不意味着它被神奇地执行了。
例如这个
get_var();
$TestClass = new TestClass();
$TestClass->do_stuff();
仍未设置
说实话,我会避免使用global
,因为该方法的主要问题是你无法追踪其中的值来自哪里,例如使用类来保存值,然后很容易找到这个班级。对我来说,使用像这样的代码只是开发人员的懒惰。
更新:这是奇怪的,因为运行此:
class TestClass {
public function do_stuff() {
global $myvar;
$myvar= 'the value we want';
}
}
$TestClass = new TestClass();
$TestClass->do_stuff();
function get_var() {
global $myvar;
echo $myvar; // here the value does NOT exist
}
get_var();
echo $myvar;
ON WAMP with php 5.4正常工作并输出
the value we wantthe value we want
请注意,虽然我在同一个文件中将其作为完整的块运行。但是我觉得我必须说你最好不要把价值注入到函数中,而不是用global
来解决它应该用IMO去掉的东西。
$TestClass = new TestClass();
get_var($TestClass->do_stuff());
get_var的目的是什么,我知道这是一个例子。但是你想要做什么,你需要global
。还有其他一些事情可以做,例如throw
和catch
例外,debug_backtrace()
,依赖注入是显而易见的。
这里只是您可以在这个主题上找到的一篇文章。
http://c2.com/cgi/wiki?GlobalVariablesAreBad
作为一名专业的Web开发人员和CIO,我必须同意他们的观点。
答案 1 :(得分:-1)
正确的方法是在函数外部声明变量,然后使用global,或者调用变量。
ctype.h
对我来说很好。