<?php

$source 
file('test.php');
$vars = array();
$unused = array();
$code = array();

foreach (
$source as $i => $line) {
    if (
preg_match_all('/\$(this->)?([a-z_\x7f-\xff][a-z0-9_\x7f-\xff]+)/i'$line$m)) {
        
$code[] = array($i 1$line$m[2]);
        
$vars array_merge($vars$m[2]);
    }
}

$count array_count_values($vars);
foreach (
$count as $var => $n) {
    if (
$n == 1) {
        foreach (
$code as $line => $a) {
            list(
$index$line$vars) = $a;
            if (
in_array($var$vars)) {
                
$unused[$index] = preg_replace(
                    
'/(\$'.$var.')([^a-z0-9_\x7f-\xff])/i',
                    
'<span style="color:red">$1</span>$2',
                    isset(
$unused[$index]) ? $unused[$index] : $line
                
);
            }
        }
    }
}

print 
'<pre>';
foreach (
$unused as $i => $line) {
    print 
"$i : $line";
}
print 
'</pre>';

?>