返回参数参考

时间:2012-06-01 06:47:05

标签: php

是否可以在类参数或全局变量中返回引用?我试试这个

class test{

  public static $var;

  public static function get(&$ref){

    $ref = self::$var;

  }

}

test::get($ref);
$ref = 'test';
var_dump(test::$var);

这是一个基本的例子,我知道,那么这个例子可以用另一种方式,但我需要保持原则


这是我的功能,参考变量

的问题在哪里
class mySession{

    public static function issetKeys(){

      $keys = func_get_args();

      $session = &$_SESSION;
      $c = 0;

      if (is_array($keys)){
        foreach ($keys as $val){

          if (isset($session[$val])){
            $session = &$session[$val];
            $c++;
          }
          else break;

        }
      }

      return $c == count($keys);

    }

    public static function &get(){

      $keys = func_get_args();

      $session = &$_SESSION;

      if (is_array($keys)){
        foreach ($keys as $val){

          if (!isset($session[$val])) $session[$val] = Array();
          $session = &$session[$val];

        }
      }

      return $session;

    }

  }

  function getValue(){

    if (!mySession::issetKeys('p1', 'p2')){
      $session = mySession::get('p1', 'p2');
      $session = 'string';
    }

    return mySession::get('p1', 'p2');

  }

  print_r($_SESSION);

但没有变量保存到$ _SESSION

2 个答案:

答案 0 :(得分:1)

不,你为什么要做这样的事情

如果要访问公共静态变量,只需编写

即可
test::$var = "Hello there handsome";

在上面的例子中,你没有将this::$var的引用传递给$ ref,你让$ ref的引用包含this :: $ var的值。 PHP不是C,并且在PHP中不需要时通常应该避免引用。

答案 1 :(得分:0)

在一般情况下,参数仅在传递函数的持续时间内存在;当函数返回时,调用堆栈被展开并且参数消失,这意味着对生活在调用堆栈中的变量的任何引用将不再有效(因为它指向已释放的内存,现在很可能包含某些内容完全是。)

也就是说, 可以返回对参数的引用,但是如果你尝试返回对实际存在于堆栈中的变量的引用(即一个),这将不起作用没有通过引用传递):

$myGlobal = 10;

// Note the & before the function name
function &returnReference(&$x) {
    return $x;
}

// Note the & before the function call
$someValue = &derp($myGlobal);
echo $myGlobal;

$someValue = 0;
echo $myGlobal;