CodeIgniter Forums
CodeIgniter V3 - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: Archived Discussions (https://forum.codeigniter.com/forumdisplay.php?fid=20)
+--- Forum: Archived General Discussion (https://forum.codeigniter.com/forumdisplay.php?fid=21)
+--- Thread: CodeIgniter V3 (/showthread.php?tid=48026)

Pages: 1 2


CodeIgniter V3 - El Forum - 02-21-2012

[eluser]ColonelChlorine[/eluser]
Hey Phil, as an idea ... why not provide a boolean parameter to the load method which declares whether or not to instantiate the class?

This way the file will be required (once), but the class not instantiated ... thereby getting rid of some of the singleton problems.

For example I would make a model called, "Company" which doesn't extend CI_Model, but has it's own internal access to CI via =& get_instance(). That way I could do something like:

Code:
$this->load->model('Company', false);
$company1 = new Company();
$company2 = new Company();
$company1->add_partner($company2);
$company1->save();

Does that make sense?


CodeIgniter V3 - El Forum - 02-21-2012

[eluser]Phil Sturgeon[/eluser]
That would break the current 2nd parameter. A 3rd param could be ok, but a little ugly.


CodeIgniter V3 - El Forum - 02-21-2012

[eluser]ColonelChlorine[/eluser]
Hmm agreed that is quite nasty. In my project I might extend CI_Loader and add a new method ... something like, "class". This would do most of the same stuff as model but not instantiate.


CodeIgniter V3 - El Forum - 02-21-2012

[eluser]WanWizard[/eluser]
@ColonelChlorine,

As long as the files are in the locations CI expects them, using $this->load is not an issue. Even if it creates the 'singleton' (which technically it isn't), nobody is stopping you from using "new" once CI has loaded it.

And if the presence of the $this->property bothers you, unset if after load...


CodeIgniter V3 - El Forum - 02-21-2012

[eluser]ColonelChlorine[/eluser]
Interesting ... my only response is that it probably interferes with constructors of my classes. You're also right, it isn't a true singleton, I am referring mainly to the automatic class initialization. Nothing is preventing me from making more class-babies (really should be called that rather than objects).

That said, if I'm just making new instances later, I can just ignore that fact as long as the constructor doesn't affect other parts of the application.


CodeIgniter V3 - El Forum - 02-21-2012

[eluser]WanWizard[/eluser]
A constructor should be used for the construction process of the object (a specific class instance).
It should not matter from where and how many times it is instantiated.


CodeIgniter V3 - El Forum - 02-28-2012

[eluser]ColonelChlorine[/eluser]
Just as a note in that implementation: your class's constructor cannot have mandatory parameters. You will get PHP warnings because CI does not provide those parameters. The way I am getting around this is to provide defaults. It seems to work fine after that.

Also I have a technical question: will creating a large number of instances of this class result in a massive increase in memory usage if the class extends CI_Model? Currently mine don't, and simply refer to get_instance() by reference internally. I'm just wondering if extending a large parent class repeatedly will affect memory/performance.