Home  >  Article  >  Backend Development  >  PHP对象属性赋值丢失问题?

PHP对象属性赋值丢失问题?

WBOY
WBOYOriginal
2016-06-06 20:37:131094browse

<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 不就获取了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn