这可能不是最明智的问题,但是是否可以从函数返回变量而不重新声明它?从函数返回变量
function test(){
$a = 1;
return $a;
}
难道只要调用该函数就可以访问$ a吗?测试();
not $ a = test();
这是唯一的方法吗?我想在调用函数后使$ a可用。
这可能不是最明智的问题,但是是否可以从函数返回变量而不重新声明它?从函数返回变量
function test(){
$a = 1;
return $a;
}
难道只要调用该函数就可以访问$ a吗?测试();
not $ a = test();
这是唯一的方法吗?我想在调用函数后使$ a可用。
你必须把变量到全局范围:
function test()
{
$GLOBALS['a'] = 'Hello World!';
}
test();
echo $a;
但它会更好地使用返回值或引用:
function test(&$ref)
{
$ref = 'Hello World!';
}
$var = '';
test($var);
不,不是由于范围界定。
一个选项是先声明$ a然后使其成为全局的。然后它将在测试中可用:
$a = '';
function test(){
global $a;
$a = 1;
return $a;
}
echo $a; // 1
但是我可以问你为什么要这样做吗?你只是在玩游戏吗?或者你有用例吗?如果你需要这个,你很可能做错了。
我正在重新编码一个脚本。大多数页面使用之前全局定义的变量。我做了一个会话检查函数,在用户登录的情况下返回相同的变量。我想我会节省一些时间。 – domino
也许如果你只是想显示的变量,你可以以这种方式使用
function test(){
$a = 1;
echo $a;
return $a;
}
,如果你愿意,你可以保存变量$ a的变量,如果没有你可以只显示它调用测试功能。
希望它有帮助。
Nicola。
我假设你想调用函数时改变一些上下文。
这是可能的。例如,所有全局变量在您的应用程序中共享相同的上下文。如果设置一个功能是一个global variable,其在全球范围内都有效:
function change_global_variable($name, $value)
{
$GLOBALS[$name] = $value;
}
change_global_variable('a', 1);
echo $a;
然而,当你做这样的事情,照顾你正在摧毁你的代码的模块化。例如,如果你有50个这样的函数和80个变量,然后你需要改变一些东西,你需要改变许多地方。更难的是,你不记得你需要改变哪些地方,以及它们是如何相互依赖的。
它通常更好地使上下文对象并将其传递给改变了它的功能,所以它更清晰的功能是什么:
class Context extends ArrayObject {}
$context = new Context;
function change_context(Context $context, $name, $value)
{
$context[$name] = $value;
}
change_context($context, 'b', 2);
echo $context['b'], "\n";
此示例演示的东西,就是所谓的依赖注入。不是修改PHP中唯一的一个(全局)上下文,而是告诉函数它应该修改什么,而不是修改硬编码的全局变量
它有一种混合形式,它使用全局变量范围来包含上下文,因此您可以将其作为附加参数传递给它,但是为了完整起见,我仅在此处显示它,因为它不能帮助保留好模块性(但要比使用多个全局变量更好):
class Context extends ArrayObject {}
$context = new Context;
function change_global_context($name, $value)
{
global $context;
$context[$name] = $value;
}
change_global_context('c', 3);
echo $context['c'], "\n";
经验法则:避免全局变量。考虑到它们非常昂贵,你不希望你的代码很昂贵。
你是什么原因?只是一时兴起? –
只是有兴趣知道。我有大约30页调用一个函数,返回这些页面使用的变量。我想我可以节省一些时间。 – domino
节省什么时间?输入'$ var ='?我的天啊。你问这个问题已经十次了。并且使你的代码变得更糟。 –