Static method and testable code

Following this discussion

enlight me on use of static methods and relation with TDD, what I learned so far is that is better to define a collection class implementing a collection interface, which has method that operate on collection of object, if this is the intend of the use of static methods. Example:

Interface iEntityCollection {
    * @param int
    * @return Entity
   public function loadById($id);
    * @return string
   public function asHtml();

Class EntityCollection implements iEntityCollection {
   private $instance = null;
   private function __construct();
   public static function getInstance() {
      // the usual singleton
   private $_entities = array();
   // ... implement interface method
   // ...

The advances is that an eventual consumer class can accept a iEntityCollection, thus having type checking via type hint, not rely on class name, and make it possible to compare performance of differrent implementations.

Discuss it in: