newbie
newbie

Reputation: 2452

How Can I get the string that present the variable in function argument?

How Can I get the string that present the variable in function argument?

example

function dbg($param){
      return "param"; 

 }
 $var="Hello World";
 echo dgb($var);

output: var

 $arr=array();
 echo dgb($arr);

output: arr

Upvotes: 0

Views: 54

Answers (4)

Andrew Moore
Andrew Moore

Reputation: 95454

It is NOT possible to do what you ask reliably.

The closest you can come up to doing that is to do a debug_backtrace() to check which file called the function then tokenize the source of that file to find the reference.

Again, this will not work reliably. It will fail if you have multiple calls on one line. Truthfully, it isn't work the trouble. You are writing the code anyway, you know which variable you are passing.

function dbg($var) {
  $bt = debug_backtrace();
  $file = $bt[0]['file'];
  $line = $bt[0]['line'];

  $source = file_get_contents($file);

  $tmpTokens = token_get_all($source);
  $tokens = array ();

  foreach ($tmpTokens as $token) {
    if (is_array($token) && $token[0] !== T_INLINE_HTML && $token[0] !== T_WHITESPACE) {
      $tokens[] = $token;
    }
  }

  unset($tmpTokens);

  $countTokens = count($tokens);

  for ($i = 0; $i < $countTokens; $i++) {
    if ($tokens[$i][3] > $line || $i === $countTokens - 1) {
      $x = $i - (($tokens[$i][3] > $line) ? 1 : 0);

      for ($x; $x >= 0; $x--) {
        if ($tokens[$x][0] === T_STRING && $tokens[$x][1] === __FUNCTION__) {
          if ($x !== $countTokens - 1 && $tokens[$x + 1][0] === T_VARIABLE) {
            return $tokens[$x + 1][1];
          }
        }
      }
    }
  }

  return null;
}

Upvotes: 1

deceze
deceze

Reputation: 522626

I'm just guessing that you're trying to make a custom debugger which as a nice touch prints the name of the variable you're debugging. Well, that's not really possible. I'd suggest you look at debug_backtrace, which allows you to print the file, line number, function name and arguments of the place where you invoked your dbg function. Unless you use dbg more than once per line that helps you find the information you're looking for, and IMO is a lot more useful anyway.

Alternatively, you can have both the name and value of your variable if you call your function like this:

function dbg($var) {
    echo 'name: ' . key($var) . ', value: ' . current($var);
}

$foo = 'bar';
dbg(compact('foo'));

Upvotes: 1

TheRealTy
TheRealTy

Reputation: 2429

You question doesnt make much sense, you may want to reword it.

It sounds like you want to use the $param in the function in which case you can just do something link echo $param;

Upvotes: 0

2hamed
2hamed

Reputation: 9067

printing a variable, you're doing it wrong.
the right ways is like this:

function dbg($param){
      return $param; 

 }
 $var="Hello World";
 echo dgb($var);

and by the way you're passing an array to a function that only accepts variables. and oh it's a null array all the way worse!

Upvotes: 1

Related Questions