【问题标题】:use all global variables at once in php function在php函数中一次使用所有全局变量
【发布时间】:2016-08-04 11:49:42
【问题描述】:

我有一个包含大约 50 个全局变量的 php 脚本。 我有大约 18 个需要全局变量的函数。

我在大多数函数中需要近 40 个全局变量。 我现在将它们包括为:

      function example1() {
      global $1, $2, $3, ..... $40;
      }

      function example2() {
      global $1, $2, $3, ..... $40;
      }

有没有更简单的方法来做到这一点?

例如一次包含所有全局变量?

可能在数组中?

希望听到一些好的建议!

【问题讨论】:

  • 将这些全局变量保存在 SESSION 中。
  • 不,不!不要这样做
  • 你有什么建议?
  • 首先 - 不要这样做。我不知道你想做什么,但这是最糟糕的解决方案。如果你仍然想要,那么将所有这些变量放在数组中并只使用一个全局数组。
  • 冒着引火的风险,因为你似乎把自己编码到了一个黑暗的角落,总有一个全局可用的$GLOBALS数组一个关联数组包含对当前在全局范围内定义的所有变量的引用 See the manual

标签: php function variables global globals


【解决方案1】:

PHP 有一个提取函数,它使用它们的键将数组中的所有元素转换为变量,也就是说,由于 $GLOBALS var 包含所有全局变量,因此只需在函数中提取它即可。

$name = 'John Doe';
function myFunction(){
  extract($GLOBALS);
  echo $name;
}

【讨论】:

    【解决方案2】:

    我将很多变量交给全局。我现在了解到,我必须在 for each 循环的 & 处直接修改数组中的数据,而不是声明它们并尝试将它们交给全局变量..

    为了能够直接修改循环内的数组元素,在 $value 之前加上 &。在这种情况下,值将通过引用分配。

          <?php
          $arr = array(1, 2, 3, 4);
          foreach ($arr as &$value) {
              $value = $value * 2;
          }
          // $arr is now array(2, 4, 6, 8)
          unset($value); // break the reference with the last element
          ?>
    

    感谢您的帮助!我可以删除很多代码和变量...

    【讨论】:

      【解决方案3】:

      您可以简单地包含所有全局变量。

      function myFunc() {
        foreach ($GLOBALS as $n => $v) {
           global $$n;
        }
        ... code using any global variable
      }
      

      或者您可以包含自己的预定义子集。

      $myGlobals = array('n1','n2');
      
      function myFunc() {
        foreach ($GLOBALS['myGlobals'] as $n) {
           global $$n;
        }
        ... code using any global variable named in $myGlobals
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-07
        • 2022-01-16
        相关资源
        最近更新 更多