Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resetting Objects vs. Constructing New Objects

Tags:

oop

php

mysql

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.

like image 335
Lotus Notes Avatar asked Oct 25 '22 17:10

Lotus Notes


1 Answers

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.

like image 56
John Avatar answered Nov 02 '22 07:11

John