Php CI:在控制器中使用相同功能的最佳实践
我有类名Deal,里面有函数名addit 我还有另一个控制器名Public,我想通过扩展它来使用属于类Deal的addit函数Php CI:在控制器中使用相同功能的最佳实践,php,codeigniter,Php,Codeigniter,我有类名Deal,里面有函数名addit 我还有另一个控制器名Public,我想通过扩展它来使用属于类Deal的addit函数 class Public extends Deal { public function addit() { //my function } } 我对Codeigniter很陌生,只是阅读了一些参考资料,在这个网站上看了另一个问题,已经有了一些答案,但我不知道哪一个是它的最佳实践,这里是我找到的一些解决方案: 1.创建交易
class Public extends Deal {
public function addit() {
//my function
}
}
我对Codeigniter很陌生,只是阅读了一些参考资料,在这个网站上看了另一个问题,已经有了一些答案,但我不知道哪一个是它的最佳实践,这里是我找到的一些解决方案:
1.创建交易文件并保存在应用程序/库功能中,以便其他控制器可以使用其功能
2.在应用程序/助手上创建addit函数,以便我们可以在任何地方使用它的函数
3.在应用程序/核心中创建交易文件,以便其他控制器可以使用其功能
我的问题是,解决我的问题的最佳实践是什么,还有其他解决方案吗?这取决于我们在这里讨论的函数类型。 如果它是一个非常简单的函数,不进行任何db访问或与CI组件交互,则可以创建一个帮助器: 引用codeigniter文档: 帮助程序不是以面向对象的格式编写的。它们是简单的, 程序功能。每个助手函数执行一个特定任务, 不依赖于其他功能
但是,如果它是一个相对复杂的代码,那么你应该考虑编写一个库:
在应用程序/库中创建Tools.php(或任何您想要的) 如果您的库需要经常使用,您可以在config/autoload.php中一次性加载它:$autoload['libraries'] = array('database', 'tools', '...');
关于图书馆的CI文档:
选项3不适合您的问题,因为您没有扩展CI本身
点评:顾名思义,“核心”是为了提升CI的核心。例如,如果你不喜欢CI处理会话的方式,那么你可以编写一个新的核心类,但是,如果是关于你的用户管理系统,那么它与你的应用程序有关,而不是框架,应该在库中完成。好的,先生,我明白你关于库和助手的观点,但是当你说选项3不合适时,我不明白,如果我在application/core内部创建类Deal,而另一个控制器使用Deal类,这是否不好?顾名思义,“core”用于改进CI的核心。例如,如果您不喜欢CI处理会话的方式,那么您可以编写一个新的核心类,但是,如果它是关于您的用户管理系统的,那么它与您的应用程序有关,而不是与框架有关,应该在库中完成。@AdrienXL请您详细解释一下
$this->CI=&get_instance()
,谢谢:)@vahidnajafi,当您在扩展CI_控制器或CI_模型的类中工作时,可以使用$this访问类父级的成员。但是,在lib中,您不扩展任何内容,因此无法访问已知的$this。由于CI实现了单例模式,您可以使用get_instance()检索神奇的$this。希望清楚。@AdrienXL非常感谢:)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Tools
{
protected $ci;
public function __construct()
{
$this->ci =& get_instance();
//Allows you to access CI components
}
public function myfunction($data)
{
//If you want to use codeigniter's functionalities :
//use $this->ci->function()
}
}
$this->load->library("tools");
$this->tools->myfunction($data);
$autoload['libraries'] = array('database', 'tools', '...');