以CodeIgniter方式加载库

时间:2013-05-09 06:23:01

标签: php codeigniter load shared-libraries

我有自己的小MVC,并希望以相同的方式加载我的库,codeigniter会这样做:

Foo {

    $load = Load();

    function temp() {
        $this->load('baa');
        $this->baa->method();
    }

}

因此Load()会生成Baa()的实例,并将其分配给Foo的属性。如果有人可以告诉我如何设置它,那将会很棒。

2 个答案:

答案 0 :(得分:0)

你有没有看过CodeIgniter包里面的system / core / Loader.php文件?我认为完整而最好的解决方案。

答案 1 :(得分:0)

如果您无法理解CI的工作原理,那么您应该为您的问题找到另一种解决方案。

你写的不是PHP。

class Foo {

    //public $load = Load(); //it is not possible, must be a constant value (string, int, bool ..)

    public function temp() {
        //$this->load('baa'); //not possible
        //$this->baa->method();
    }

}

在要求CodeIgniter-way之前,你应该学习PHP和他的POO。

无论如何,我告诉你你的要求,简化:

库/ somelib.php

class Somelib {
    public $foo = "ok";
}

的index.php

class Core {

    public function load($library) {
       //library already loaded
       if( property_exists($this, $library) )
        {
            return $this->{$library};
        }

        //library file not found
        if( ! file_exists("libraries/$library.php") )
        {
            exit('library not found');
        }

        //include the library file
        include("libraries/$library.php");

        //instanciate the library dynamicly
        $class = new $library();

        //assign the class object to a Core class property
        $this->{$library} = $class;
    }   
}

//This class inherit Core methods
class OtherClass extends Core {

    public function some_method() {
        $this->load('somelib');
        echo $this->somelib->foo;
    }
}


$App = new OtherClass();

$App->some_method();

假设CI中的$this是核心类,因此它是$App 而OtherClass是一些控制器或方法。

如果你运行index.php,你会看到ok