用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3140|回复: 4
收起左侧

[版本 2.x] load一个library是否相当于是new 了一个class的操作

[复制链接]
发表于 2011-10-19 17:38:57 | 显示全部楼层 |阅读模式
比如说,我有个library 名字叫Hello
Class Hello()
{
public temp;
}
我在controllers里面做load操作
$this->load->library('Hello');
然后修改temp的值,$this->hello->temp = 2;
是否跟下面操作是一样的呢?
$c = new Hello;
c->temp = 2;


如果是一样的话,那么我做两次new的操作,用load->library怎么实现呢?
$c = new Hello;
$a = new Hello;
$c->temp = 2;
$a->temp = 3;
发表于 2011-10-20 01:01:25 | 显示全部楼层
LOAD后会记录的,再次LOAD时,如果已经LOAD的话就返回上次LOAD的实例
发表于 2011-10-20 19:25:27 | 显示全部楼层
CI 核心是单例模式的,只能实例化一个实例。
发表于 2011-10-21 09:24:12 | 显示全部楼层
首先,楼主的Class Hello() ,public temp;都写错了、
发表于 2011-10-21 09:25:24 | 显示全部楼层
本帖最后由 ~夜行侠~ 于 2011-10-21 09:29 编辑

其次,我觉得可以这样实现楼主的想法:
PHP复制代码
<?php
 
Class Hello
{
public $temp;
 
public function getInstance()
{
    return new Hello();
}
}
 
?>
复制代码
PHP复制代码
 
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * @author icen
 * @email icen21@21cn.com
 * @date 2011/10/6
 * @copyright icen
 */

 
 
class Test extends CI_Controller {
 
    public function __construct(){
        parent::__construct();    
    }
 
    public function index()
    {
       $this->load->library('hello');
       $hello1=$this->hello->getInstance();
       $hello1->temp=1;      
       print_r($hello1);
       
       $hello2=$this->hello->getInstance();
       $hello2->temp=2;
       print_r($hello2);      
 
    }
       
}
复制代码

本版积分规则