I agree it's mostly not necessary and harmful. I would add one case where it is usefull: to create a higher level language. Eg User::with100Points(). More can be found in the book Growing object oriented software guided by tests.
–
koenApr 2 '11 at 7:44

@Click Upvote If you mean how it looks in code: class User { public function setPoints($points) { //set points } public static function with100points() { return new self(100); } }. User::with100points() is more readable than $user = new User(); $user->setPoints(100); You could create a special class for this DSLUser extends User { public static method with100points() {} }. There aren't that many opportunities to use this correctly in your code but in UnitTests you can make more use of it and your tests often become very clear.
–
koenApr 15 '11 at 17:00

This way the empty array can be used within the class/object and outside as a starting template.
I also use Static Methods for functions that would normally be standalone functions but I want to keep them in the class so it is all together but also make them available outside as a static method such as: