我有自己的小 MVC,并希望以同样的方式加载我的库,codeigniter 会:
Foo {
$load = Load();
function temp() {
$this->load('baa');
$this->baa->method();
}
}
所以Load()
创建一个实例Baa()
并将其分配给Foo
的属性。如果有人能告诉我如何分配这个,那就太好了。
我有自己的小 MVC,并希望以同样的方式加载我的库,codeigniter 会:
Foo {
$load = Load();
function temp() {
$this->load('baa');
$this->baa->method();
}
}
所以Load()
创建一个实例Baa()
并将其分配给Foo
的属性。如果有人能告诉我如何分配这个,那就太好了。
如果您无法理解 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();
假设$this
CI 是核心类,所以它是$App
.
而 OtherClass 是一些控制器或方法。
如果你运行 index.php,你会看到ok
.
你有没有看过 CodeIgniter 包里面的 system/core/Loader.php 文件?我认为完整和最好的解决方案是。