2011-10-20 8 views
4

可能性の重複:
Detecting whether a PHP variable is a reference/referencedはどのように伝えるために

変数が参照であるなら、私に教えてくれる機能がある場合、私は疑問に思って変数。特定の関数がない場合、それが参照変数かどうかを判断する方法はありますか?

+0

変数が参照であるかどうかをチェックする組み込み関数はないと思います。 –

+0

面白い質問ですが、ユースケースが何か不思議です。 – deceze

+0

予期せず変更された変数をデバッグするためのユースケースです。 –

答えて

1

これはdebug_zval_dumpを使用して判断できます。私の答えon another questionを参照してください。

+0

これについて別の質問で回答した場合、なぜここで回答しましたか? – Mob

0

user examplesから、直接的な方法はないようですが、解決策が見つかります。

0
<?php 
$a = 1; 
$b =& $a; 
$c = 2; 
$d = 3; 
$e = array($a); 
function is_reference($var){ 
    $val = $GLOBALS[$var]; 
    $tmpArray = array(); 
    /** 
    * Add keys/values without reference 
    */ 
    foreach($GLOBALS as $k => $v){ 
     if(!is_array($v)){ 
      $tmpArray[$k] = $v; 
     } 
    } 

    /** 
    * Change value of rest variables 
    */ 
    foreach($GLOBALS as $k => $v){ 
     if($k != 'GLOBALS' 
      && $k != '_POST' 
      && $k != '_GET' 
      && $k != '_COOKIE' 
      && $k != '_FILES' 
      && $k != $var 
      && !is_array($v) 
     ){ 
      usleep(1); 
      $GLOBALS[$k] = md5(microtime()); 
     } 
    } 

    $bool = $val != $GLOBALS[$var]; 

    /** 
    * Restore defaults values 
    */ 
    foreach($tmpArray as $k => $v){ 
     $GLOBALS[$k] = $v; 
    } 

    return $bool; 
} 
var_dump(is_reference('a')); 
var_dump(is_reference('b')); 
var_dump(is_reference('c')); 
var_dump(is_reference('d')); 
?> 

これはthe PHP documentationの例です。