public function __construct($id)
    {
        $this->identifier = $id;
    }
    public function signals()
    {
        if ($this->signals == null) {
            $this->signals = new ezcSignalCollection(__CLASS__);
        }
        return $this->signals;
    }
    public function manipulate()
    {
        // change the data here
        $this->signals()->emit("dataChanged", $this->identifier);
    }
}
class Cache
{
    public function deleteCache($identifier)
    {
        echo "Deleting cache for ID: {$identifier}\n";
    }
}
$cache = new Cache();
ezcSignalStaticConnections::getInstance()->connect("DataObject", "dataChanged", array($cache, "deleteCache"));
$data1 = new DataObject(1);
$data2 = new DataObject(2);
$data1->manipulate();
$data2->manipulate();