views:

47

answers:

2

Sorry if the title is a little vague, I do not know how else to describe it.

I am making my own small framework. Things are going nicely and I am enjoying looking at topics that I usually do not need to check out as 'the magic' does it for me.

My framework is PHP based and I want it to run from a single instance. What I mean by this is the following.

class Controller_Name extends Controller {

  public function __construct() {
    $this->load->library('session');
    $this->load->model('Model_Name');
  }

}

class Model_Name extends Model {

  public function something() {
    if ($this->session->get($something))
      // Do something Amazing
  }

}

As hopefully illustrated above I want all controllers / Models / Views to share already loaded libraries.

So if a class is loaded in the Controller, I will be able to use it in a view file.

Does anyone know how this done? Can you point me in the direction of an article covering it, what this is called or some php function calls either completely or partly do the job.

As always, any answers are greatly appreciated.

A: 

Your controller can implement __get and intercept requests for libraries that have been loaded. Ideally you'd store the libraries in a static field to get the reuse you mentioned you wanted.

Also, to get load to behave like you want I'd personally create a Loader class and create an instance of it in the Controller. Then in the __get magic method I'd make it fetch it from the loader.

Allain Lalonde
A: 

If your aim is to make sure all dependencies inside your classes are resolved, have a look at the Service Containers from the Symfony Dependency Injection Component or the Stubbles framework.

Gordon