2016-10-04 10 views
1

レガシーコードを扱う際、特定の配列(配列はキーとしての文字列のみを使用している)へのすべてのアクセスを監視したいと思います。特に、アクセス中にどのキーが使用されているかは、今のところうまくいくでしょう。すべての配列のアクセスを傍受する

PHP(language + ext。libs)でこれを達成するための迅速かつ簡単な方法はありますか?

一部のコードエディタで「ファイルで検索」を使用するのは、プロセスを自動化する必要があるため、最適なソリューションではありません。

+0

カスタムクラス拡張配列を作成し、アイテムアクセスにエコーします。次に、このカスタムクラスに配列の型を変更します。 –

+0

ありがとう!それはいい考えです。 ArrayAccessを実装するためのサンプルコードを使用し、いくつかのロギングコードを挿入しました。答えを提供するためにここの慣習は何ですか?コードを回答として投稿し、それを解決策としてマークする必要がありますか?私に汚いと思って、自分の答えに報酬を与える... – martin

+0

私は自分の質問に答えることをお勧めします。あなたは、同様の問題を抱えている他の人を助けます。 –

答えて

0

これは可能な解決策です。私はhttp://www.php.net/manual/en/class.arrayaccess.phpの基本的な例を使用し、各アクセスをログに記録し、ログを読み取る方法を提供することでそれを拡張しました。それは特別なものではありませんが、スクリプトが私の配列にアクセスした場所を追跡するのに役立ちました。

class logging_array implements ArrayAccess 
{ 
    private $container = array(); 
    private $access_log = array(); 

    public function offsetSet($offset, $value) 
    { 
     if (is_null($offset)) 
     { 
      $this->container[] = $value; 
     } 
     else 
     { 
      $this->access_log[] = "SET: " . $offset; 
      $this->container[$offset] = $value; 
     } 
    } 

    public function offsetExists($offset) 
    { 
     return isset($this->container[$offset]); 
    } 

    public function offsetUnset($offset) 
    { 
     $this->access_log[] = "UNSET: " . $offset; 
     unset($this->container[$offset]); 
    } 

    public function &offsetGet($offset) 
    { 
     $this->access_log[] = "GET: " . $offset . " (". (isset($this->container[$offset]) ? "key valid" : "key invalid") . ")"; 

     if (isset($this->container[$offset])) 
     { 
      $myref =& $this->container[$offset]; 
      return $myref; 
     } 
     else 
     { 
      return null; 
     } 
    } 

    public function getLog() 
    { 
     return implode("<br>\n", $this->access_log); 
    } 
} 
関連する問題