我已经使用CI两年了。有一件事情让我非常恼火,那就是使用&get_instance()
。尽管我们在图书馆,助手,主持人,模特等人员内部时感到不安。但每次加载时都很笨拙。如果您忘记将它加载到某个地方,只需使用$this->blah->blah()
而不是$CI->blah->blah()
,这会造成太多麻烦,如果您在线工作,则会面临抱怨他发现错误的客户端。我在laravel
中看到,您无需在整个应用程序的任何地方加载instance
。这是因为laravel
是autoloading
所有库和模型都可以在应用程序的任何地方使用。但是在我看来,这不利于加载某些特定位置不需要的类。这告诉我Codeigniter是灵活的,但我仍然想要一个替代方案,我不想使用&get_instance()
。任何想法或建议?请。如何摆脱Codeigniter中的&get_instance()
1
A
回答
0
在你的模型或核心模型或库
//class MY_Model extends CI_Model
//class SomeLibrary
class Some_model extends CI_Model {
private $_CI;
public function __construct() {
parent::__construct(); //for model or core model
$this->_CI =& get_instance();
}
//if you called attributs who does not exist in that class or parent class
public function __get($key)
{
return $this->_CI->$key;
}
//if you called methods who does not exist in that class or parent class
public function __call($method, $arguments)
{
call_user_func_array(array($this->_CI, $method), $arguments);
}
public function test() {
var_dump($this->some_controller_key);
var_dump($this->some_lib_loaded);
}
}
*尚未测试
从真棒的Flexi验证
//from a Model to keep access of CI_Controller attributs
public function &__get($key)
{
$CI =& get_instance();
return $CI->$key;
}
通过一段代码的启发
我很震惊当我看到^^
To e xplain &__get
,我认为当你第二次调用这个神奇的方法时,PHP将不会再执行它,但会从第一次调用中获得他的结果。
+0
感谢您的回复。我一定会测试它 –
相关问题
- 1. 无法摆脱CodeIgniter中的url index.php
- 2. 摆脱日期中的单引号codeigniter
- 3. 如何摆脱libthread_db
- 4. 如何摆脱IBAction?
- 5. 如何摆脱SimpleAdapter
- 6. 如何摆脱EXC_BAD_ACCESS
- 7. 如何摆脱xmlns =“”?
- 8. 如何摆脱aspx.designer.cs?
- 9. 如何摆脱Nuget
- 10. 如何摆脱java.lang.OutOfMemoryError?
- 11. 如何摆脱TLE?
- 12. 如何摆脱PlaceHistoryMapper
- 13. 如何摆脱旧的Localizable.strings?
- 14. 如何摆脱goto的?
- 15. CodeIgniter - 在不同情况下摆脱index.php
- 16. get_instance()在Codeigniter 2中返回null
- 17. 如何摆脱列表中的列表?
- 18. 如何摆脱中间的承诺链
- 19. 如何摆脱Cassandra 1.2.13中的墓碑?
- 20. 如何摆脱nodejs中的for循环
- 21. 如何摆脱Emacs Lisp中的maphash?
- 22. 如何摆脱sharepoint中的侧栏?
- 23. 如何摆脱酒吧的Android中
- 24. 如何摆脱SSDT中的localdb?
- 25. 如何摆脱MVC中的MemoryCache对象?
- 26. 如何摆脱图中的数字? PHPExcel
- 27. 如何摆脱URL中的“类别”hexo
- 28. 如何摆脱Python中的NameError?
- 29. 如何摆脱ASP.Net MVC中的主页?
- 30. 如何摆脱Joomla URL中的日期?
自动加载不应该表示它加载所有类,但在需要时加载它们。但是接下来我又怎么知道CodeIgniter呢? – Rufinus
没有其他选择,您需要这样做才能获得实际的原始CI模型。如果您犯了一个错误并使用$ this,只需使用内置于文本编辑器中的替换函数即可。 –