基本上在codeigniter中,我如何在其他库中使用系统和应用程序库?所以说,我有一个应用程序库,如:,我如何在库中使用系统和应用程序库?
class User
{
// some instance variables
}
现在可以说,我想用笨会话类的用户类,基本上能够与用户类中的会话。我怎么能这样做呢?
基本上在codeigniter中,我如何在其他库中使用系统和应用程序库?所以说,我有一个应用程序库,如:,我如何在库中使用系统和应用程序库?
class User
{
// some instance variables
}
现在可以说,我想用笨会话类的用户类,基本上能够与用户类中的会话。我怎么能这样做呢?
这样做的典型方法是使用get_instance()
,它返回Codeigniter的实例(实际上是当前控制器类)。
这将在任何地方工作在您的CI应用:
get_instance()->session->set_userdata('key', 'value');
$segments = get_instance()->uri->segment_array();
// etc.
通常在笨,你把它分配给类变量的易用性:
class User
{
private $CI;
function __construct()
{
$this->CI = get_instance();
}
// Example
function login()
{
$user = $this->get_user();
$this->CI->session_set_userdata('user_id', $user->id);
}
}
这确实创造了很多依赖CI的状态和不同的加载类,而不是通过依赖注入将它们的实例直接传递给User类,但这是开发CI库的典型流程。
理想情况下,您只需传入需要从模型或控制器加载库的会话数据。
否则,这应该从任意文件中工作:
<?php
ob_start();
include('index.php');
ob_end_clean();
$CI =& get_instance();
$CI->load->library('session'); //if it's not autoloaded in your CI setup
echo $CI->session->userdata('name');
?>
我发现这个答案了类似question。
我想我们回答了不同的问题,我想OP可以澄清它们的含义。我也遇到过这个问题,特别是需要完全在codeigniter应用程序之外的第三方“插件”中使用CI会话数据。 –
不要忘记通过引用来指定:'= &' ;) –
@JordanArseno:我觉得现在不再需要这种印象了,因为所有对象都是通过引用来分配的(认为它是在PHP5中),除非明确地指定'clone' d,例如:http://codepad.org/fOSgTiP4。不过,这可能仍是一个好习惯。如果我错了,请告诉我,我想知道。 –
你很可能是正确的,韦斯利。我只是带着信仰的CI文件,并没有进一步考虑它! –