0

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

Foo {

    $load = Load();

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

}

所以Load()创建一个实例Baa()并将其分配给Foo的属性。如果有人能告诉我如何分配这个,那就太好了。

4

2 回答 2

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";
}

索引.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();

假设$thisCI 是核心类,所以它是$App.
而 OtherClass 是一些控制器或方法。

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

于 2013-11-11T13:54:09.593 回答
0

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

于 2013-05-09T06:28:33.727 回答