CI的是这样的吗?你确定?还是另有。。。。
我在改CI框架时,碰到了一个现象:就是同一个类连续被调用时,其上一次函数成员变量的值会被记录下来。我一开始并不明白这是怎么会事?也问问了别人,有说是“当在同一页面时,连续调用同一个类时,其函数成员变量的值会驻留在内存中”,但是对于这个说法我有点不信(仅我个人观点),再后来,我想是不是CI运用了单一模式,所造成这个现象的。为从侧面证明这一点,我写了如下代码:(我不高手哈,所以可能有错,或者有不规范的地方)echo '----------------------方案一-----------<br/>';
//方案一
class you{
private $url = '';
public function setyou($mess){
$this->url .=$mess;
}
public function getyou(){
return $this->url;
}
}
function getMyYou($mess){
static $you;
if(!is_object($you)){
$you = new you();
}
$you->setyou($mess);
$myyou = $you->getyou();
var_dump($myyou);
}
$mess = 'i love three';
getMyYou($mess);
$mess = 'i love your';
getMyYou($mess);
getMyYou($mess);
echo '----------------------方案二-----------<br/>';
//方案二
class she{
private $url = '';
static$obj;
private function she(){
}
public function setshe($mess){
$this->url .=$mess;
var_dump($this->url);
}
publicstatic function getshe(){
if(empty(self::$obj)){ //此处人脸是 “:$”,静态变量的调用形式,论坛给我换成人脸了
self::$obj = new she();
}
return self::$obj;
}
}
$one = she::getshe();
$mess= 'first:you have only one';
$one->setshe($mess);
$two = she::getshe();
$mess= 'two:you have two';
$two->setshe($mess);
这样不管是方案一还是方案二结果都是会记住上一次的值 。我输出结果为:
----------------------方案一-----------
string 'i love three' (length=12)
string 'i love threei love your' (length=23)
string 'i love threei love youri love your' (length=34)
----------------------方案二-----------
string 'first:you only one' (length=18)
string'first:you only onetwo:you have two'
(length=34)
不知道CI是怎么做的呢(就第一次实例化后,再第二次时怎么记住了第一次成员变量的值(红色部分) )???
希望高人指点哟!! ->load->xxx是單件模式 没错,CI 的 load 都有规避机制,也就是只会 new 一次,所以多次 load 无效。
我觉得也没必要多次 load 同一个东西,如果有特殊需要可以扩展 loader 类。 首先谢谢
visvoy,HEX 。谢谢你们的回复。
在CI中,好像不只是LOAD是单一模式,它COMMON。PHP文件中的LOAD_CLASS好像也是的。。。
另外引入传值会不会也会造成这个现象呢? 引入传值和这个有什么关系?什么是引入传值?
页:
[1]