【问题标题】:How to affect a variable outside of a function without using globals如何在不使用全局变量的情况下影响函数外部的变量
【发布时间】:2012-04-24 13:10:08
【问题描述】:

需要一些代码示例,了解如何在不使用全局变量的情况下影响函数外部的变量。另外我想知道我应该在哪里使用 global 而不是。

提前致谢。

【问题讨论】:

  • Kevin Yank 更喜欢使用非全局方法来影响

标签: php function variables global


【解决方案1】:

唯一在不使用全局变量的情况下影响另一个范围内的变量的方法是使用references。您可以通过在参数前面加上& 来定义一个通过引用获取参数的函数。例如:

function increment(&$var) {
  $var++;
}

$int = 1;
increment($int);
echo $int; // 2

在回答“我什么时候应该使用全局变量”这个问题时——从不。它们使程序流程混乱并引发错误和意外行为,而且它们还降低了代码的可移植性,因为它依赖于另一个范围内的变量名。

【讨论】:

  • 那么 PHP 应该在新版本中放弃该功能
  • PHP 很少放弃功能。新版本通常旨在尽可能向后兼容,而旧脚本可能依赖于全局变量。另一点是,在一些非常、非常罕见的情况下,它们可能有用。就像goto - 人们会告诉你永远不要使用它们,因为它比说“只有在你完全理解你在做什么以及它的所有含义时才使用它们”更简单。告诉新手程序员永远不要使用这些功能更容易也更安全,然后当他们变得更有经验时,你可以告诉他们其他方式。
  • 完美答案。非常感谢
【解决方案2】:

不要使用全局变量,它是邪恶的。

对于问题的第二部分,您可以这样做:

function test(&$param) {
    $param = 'new';
}

$test = 'old';
test($test);
echo $test; // returns 'new'

【讨论】:

  • “&”是什么意思?我是 php 新手
  • 为什么他们是邪恶的。 PHP 内部做了什么坏事?
  • & 表示通过引用而不是值传递变量。全局变量并不“邪恶”,但它们通常是不好的编程习惯,因为它们往往会使事情变得混乱并导致意外错误。
  • 关于邪恶这个网站上有很多问题和答案。对于 & 在这里阅读的内容 php.net/manual/en/language.references.php
【解决方案3】:
$var = 'value';

echo $var; //outputs "value"

a($var);
echo $var //outputs "new value; func a";

b('some other sutff', 'etc');
echo $var; //outputs "new value; func b";

function a(&$var2affect){

 $var2affect = 'new value; func a';

 return;

}

function b($some_var, $some_second_var){

  global $var;

  $var = 'new vaule; func b';

}

或者只是告诉我们你具体想做什么

对不起我的英语

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多