tags:

views:

122

answers:

2

Is it considered better practice and/or more efficient to create a 'reset' function for a particular object that clears/defaults all the necessary member variables to allow for further operations, or to simply construct a new object from outside?

I've seen both methods employed a lot, but I can't decide which one is better. Of course, for classes that represent database connections, you'd have to use a reset method rather than constructing a new one resulting in needless connecting/disconnecting, but I'm talking more in terms of abstraction classes.

Can anyone give me some real-world examples of when to use each method? In my particular case I'm thinking mostly in terms of ORM or the Model in MVC. For example, if I would want to retrieve a bunch of database objects for display and modify them in one operation.

A: 

Reseting is done for performance reasons. Default approach is to create new object when you need it, not recycle some existing one. If you are not worrying about your php being slow than just create. If you worry about php being slow, you should stop and worry about other things you rely on being much slower.

Kamil Szot
+2  A: 

When you re-use the objects, you're using the Object Pool pattern.

One of the main issues to consider is is how much state these objects have, and how much of that state needs to be reset for the next user. With a database connection, you don't want to have to do the connection again - otherwise you might as well just create a new one. The idea is to leave the object connected, but to clear any results.

Reasons not to use object pool:

  • Complexity of the pool
  • Memory cost of having these objects instantiated when not required. This might even slow down garbage collection.
  • Establishing exactly what state needs to be reset

Reasons to use an object pool:

  • It takes too long to create or destroy an object

Further details in a paper by Kircher and Jain.

John