Two years ago at some conference I had a conversation with Sebastian about the need for a way to overload the new operator in PHP so, probably, bad designed code can be tested more easily by replacing specific classes with mocks. On the train ride home -- I like coding on a train without the disturbing Internet -- I came up with a proof-of-concept extension for PHP and sent it to Sebastian.
Then we more or less forgot about it or did other things until a few days ago where both, Sebastian and I, independently remembered it. Sebastian then pushed the code as part of a new test_helpers extension with some documentation to github and I fixed some bugs in it. The aim of the extension is to collect functionality which might be beneficial for phpUnit and other test scenarios but which should never reach a production environment.
Currently only the new overloading is part of this extension. A simple example might look like this:
<?php
class Foo {}
class Bar {}
function callback($className) {
if ($className == 'Foo') {
$className = 'Bar';
}
return $className;
}
var_dump(get_class(new Foo));
set_new_overload('callback');
var_dump(get_class(new Foo));
?>
Which will print
string(3) "Foo" string(3) "Bar"
Today Sebastian was brave and released it as 1.0.0 on phpUnit's PEAR channel. Please refer to the README for further information.