拦截每个阵列访问

时间:2016-10-04 11:33:34

标签: php

在使用遗留代码时,我想监视对某个数组的所有访问(数组只使用字符串作为键),即读取和写入访问。特别是,现在很高兴在访问期间使用哪些密钥。

有没有一种快速简便的方法来实现PHP(语言+分机库)?

在某些代码编辑器中使用“在文件中查找”并不是最佳解决方案,因为该过程应该是自动化的。

1 个答案:

答案 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);
    }
}