<code><?phpclass 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>
本文来源gaodaimacom搞#^代%!码&网*
搞代gaodaima码
回复内容:
<code><?phpclass 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><?phpclass 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 不就获取了。