<code><?php class demo { public $name; public function test1() { $this->name = 'zhangsan'; } public function test2() { print_r($this->name); } } $obj = new demo(); $obj->test1(); $obj->test2(); // 输出 zhangsan 我在一个PHP文件里面执行结果如上,但是我用框架开发网站测试调用的时候执行流程如下: 1.我的test1方法跳到模板 ,并且方法里将$name 赋值了 'lisi' 2.模板提交的时候提交到了test2,并且打印出属性$name为空 这是为啥呢?? </code>
<code><?php class demo { public $name; public function test1() { $this->name = 'zhangsan'; } public function test2() { print_r($this->name); } } $obj = new demo(); $obj->test1(); $obj->test2(); // 输出 zhangsan 我在一个PHP文件里面执行结果如上,但是我用框架开发网站测试调用的时候执行流程如下: 1.我的test1方法跳到模板 ,并且方法里将$name 赋值了 'lisi' 2.模板提交的时候提交到了test2,并且打印出属性$name为空 这是为啥呢?? </code>
想到的几种可能
1.不是同一个实例
前后引用对象的方式是否真的引用到同一个实例上?
2.有魔术方法改变了行为
<code>php</code><code><?php class BadAss { function __set($name, $value) { $this->{self::confuse($name)} = $value; } private static function confuse($name) { return substr($name, 0, 4) !== 'bad_' ? "bad_$name" : $name; } } $o = new BadAss; $o->name = 'value'; var_dump($o);//bad_name => value </code>
是一个实体么
你要获取$name 直接使用$obj->name 不就获取了。