我正在尝试自动化在我使用的框架(CodeIgniter)中访问库的过程,但我遇到了一些问题。
Codeigniter目前加载这样的库:
$this->CI->load->library('name');
$this->CI->name->method();
毋庸置疑,这是一大堆可以用更少的东西实现的代码。
我想像这样访问我的lib:
_Lib::name->method();
然后_Lib类将负责加载正确的lib(或者在这种情况下指示将lib加载到loader类)。
但是,上面的代码导致错误“意外的T_OBJECT_OPERATOR”。
我的最终目标是能够与库进行通信,并使用尽可能少的代码按需加载,而无需初始化全局变量。
有什么想法吗?请记住,它需要看起来尽可能可用且不言自明。
我想避免使用像_Lib('name') - > method()这样的东西,因为每次写这个都很繁琐。
修改
我最终创建了一个默认的库,我扩展了我的库,默认的库具有指向其他库(或模型,或者帮助器,或者等等)加载到appropreate loader的属性,所以我可以做
$this->lib->name->method();
感谢大家的回答
答案 0 :(得分:2)
“意外T_OBJECT_OPERATOR
”错误表示您对_Lib::name
的调用未返回从中锁定方法调用的对象。从技术上讲,_Lib::name
会在name
中返回类常量_Lib
的值。你正在尝试
class _Lib
{
const name;
}
_Lib::name->method();
但常量不能保存对象,因此没有->
。
您不希望将库转换为静态调用because anything static couples to the global scope and is much harder to test。继续使用CI提供的开箱即用。
如果您想让一个班级全局管理其他班级,请考虑使用Dependency Injection Container,就像Symfony Components中提供的那样。
答案 1 :(得分:2)
你编写它的方式,_Lib :: name是一个类常量。您的意思是_Lib::$name->method();
吗?