是否可以在类参数或全局变量中返回引用?我试试这个
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
答案 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;