I’m creating an ORM in PHP, and I’ve got a class ‘ORM’ which basically creates an object corresponding to a database table (I’m aiming for similar to/same functionality as an ActiveRecord pattern.) ORM itself extends ‘Database’, which sets up the database connection.
So, I can call:
$c = new Customer(); $c->name = 'John Smith'; $c->save();
The ORM class provides this functionality (sets up the class properties, provides save(), find(), findAll() etc. methods), and Customer extends ORM. However, in the future I may be wanting to add extra public methods to Customer (or any other model I create), so should this be extending ORM or not?
I know I haven’t provided much information here, but hopefully this is understandable on a vague explanation, as opposed to posting up 300+ lines of code.
I agree with the other answers here – put the additional methods into a descendant class. I’d also add an asterisk to that though: each time you extend the class with extra methods, think about what you are trying to achieve with the extension, and think about whether or not it can be generalised and worked back into the parent class. For example: