|
我在改CI框架时,碰到了一个现象:就是同一个类连续被调用时,其上一次函数成员变量的值会被记录下来。我一开始并不明白这是怎么会事?也问问了别人,有说是“当在同一页面时,连续调用同一个类时,其函数成员变量的值会驻留在内存中”,但是对于这个说法我有点不信(仅我个人观点),再后来,我想是不是CI运用了单一模式,所造成这个现象的。为从侧面证明这一点,我写了如下代码:(我不高手哈,所以可能有错,或者有不规范的地方)
PHP复制代码 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);
}
public static 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是怎么做的呢(就第一次实例化后,再第二次时怎么记住了第一次成员变量的值(红色部分) )???
希望高人指点哟!! |
|