I come from a Java background and I am now trying to study PHP for a web project I am doing on the side written in CodeIgniter. Right now I am trying to study how to use CI’s models. I am naturally very curious about reading framework code to gain a deeper understanding of how the tools I am using work.
I am really confused as to where the the “$db” in “$this->db” comes from in the Model classes that extend CI_Model come from. I checked the CI_Model class itself but it is not there.
Prior to this I have read the CI_Controller’s code and somehow reckon that the although the $this->load->model(….) is not an instance variable ($this->load) with a method model(…_), somehow “it is there” because the constructor instantiates a $this->load instance variable in the constructor (the Loader class found in the core/ folder which has a model(…) function.
But for the $CI_Model I don’t see the same thing. Where does the “$this->db” being referenced and when is it loaded?
I’ve not studied the code hard enought, but I’ve been using codeigniter for a while, I hope not to say something wrong, but things doesn’t work as you guessed. The $db you’re looking for is not in the CI_Model superclass (nor in the CI_Controller superclass), but it’s a variable declared in the Loader class (system/core/loader.php).
A codeigniter application is designed to work as if it were a giant “superclass”, in fact all libraries and models and so on are instantiated using $this (which usually is used in the scope of a class), so when you’re loading the db library – and you can do it in your models but also in your controllers (and, if you instanciate the main $CI class in a custom library, also there) – you’re in fact referring to a variable create in the loader class, precisely in line 229 (more or less) inside the database method of the CI_Loader class.
I’m not so deep in CI knowledge to give you better details, but if you take a look at the codeigniter.php and loader.php you can get enough insights to underdstand how CI internally works.
If you have other question or something’s still not clear just ask 😉