我有自己的小MVC,并希望以相同的方式加载我的库,codeigniter会这样做:
Foo {
$load = Load();
function temp() {
$this->load('baa');
$this->baa->method();
}
}
因此Load()
会生成Baa()
的实例,并将其分配给Foo
的属性。如果有人可以告诉我如何设置它,那将会很棒。
答案 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
。