23026


やりたいことは、

[code]

    $hoge = 5;
    
[/code]

などとされている変数があって、それ以降、参照も代入もされていない場合、不要なのでそもそも消すということがやりたいのです。  
実際には、クラスのメンバ変数で、どこかのメソッドで参照してるか、変更してるかというのも加味して調べたいし、  
これが配列の場合に、

[code]

    $hoge['a'] = 5;
    $hoge['b'] = 5;
    $hoge['c'] = 5;
    
[/code]

とあある場合、

[code]

    $hoge['b']
    
[/code]

だけ、以降参照も変更もされていない  
みたいなことを知りたいのです。

すごく基本的なことで、それはこうするとすぐわかるよ  
みたいなことなのか、  
それとも、そんな都合の良いことはできない  
ということなのかもわからないのですが、アドバイスいただければ助かります。


CC BY-SA 3.0
2016-03-11T07:19:52.423
23023
2016-03-11T07:58:14.720
14738
question
php
PHP(5.4系)で任意の変数の値がある時点以降に参照、代入されたかをチェックする方法はありますでしょうか？


本家に似たような[質問](https://stackoverflow.com/questions/5940369/how-to-check-for-
unused-variables-functions-in-class)がありました。

基本プログラム中から（それらをチェックするようなコードを実装(参照カウントを持つような実装)しないで）チェックする方法はないと思います。  
なので、チェックするにはソース自体をチェックする必要があって、リンク先によるといくつかそういうチェックをするツールがある(多分チェック先で挙げられている以外にもあると思う)ようです。


CC BY-SA 3.0
2016-03-11T07:40:33.047
23025
2016-03-11T07:40:33.047
2017-05-23T12:38:55.250
-1
5044
23023
answer


あくまでデバッグ上でやるだけであればzend内部で持っている参照カウント`refcount`を見てやればいいかと思います。  
(確かPHP5～だったと思う)  
参照で引き渡した後の`refcount`も増加する点に注意してください。  
実装で行いたいのであればBLUEPIXYさんの言うとおりないです。

[code]

    function debug_zval($n){
        $zval_container = "";
        ob_start();
        debug_zval_dump($n);
        $zval_container = ob_get_contents();
        ob_end_clean();
        return $zval_container;
    }
    
    echo debug_zval($hoge['b']);
    
[/code]

[参考：参照カウントについて](http://php.net/manual/ja/features.gc.refcounting-basics.php)  
[参考：zendの値をダンプする](http://php.net/manual/ja/function.debug-zval-dump.php)


CC BY-SA 3.0
2016-03-11T07:58:14.720
23026
2016-03-11T07:58:14.720
23023
answer