0

is any way to return reference at class parameter or global variable? I try this

class test{

  public static $var;

  public static function get(&$ref){

    $ref = self::$var;

  }

}

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

it's a basic example, i know, then this example can be use another way, but i need to keep principle


this is my function, where is problem with reference to variable

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);

but no variable save in to $_SESSION

4

2 回答 2

1

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

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

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

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

于 2012-06-01T07:22:27.597 回答
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;
于 2012-06-01T13:59:39.737 回答