Unless `getData()` returns values by reference and users assign that return value by reference in turn (see: [here](http://www.php.net/manual/en/language.references.return.php)), I don't think this accomplishes anything. @henrikbjorn mentioned that he didn't actually want to change the contents of the data (realistically, the results), but rather change it to something else entirely. His use case sounds like implementing a slim ODM atop our collection class. In that case, even working with references isn't enough -- as he is limited to changing the contents of the data.

On a side note, having the constructor arguments passed by reference means we can't use literals (came up while I was writing a unit test).

I think we can do without references throughout the event classes and simply re-assign the query or results accordingly in the classes that dispatch the events. That would allow complete flexibility to alter or reassign the data, and copy-on-write semantics should avoid needless memory usage.