执行函数后,对象的内容会发生变化

时间:2012-09-10 20:16:32

标签: php class object

同一类有两个对象:

$obj1 = new MyClass();
$obj2 = new MyClass();

然后我将函数func应用于$obj2。但是,一旦执行此功能,我注意到$obj1的内容也发生了神奇的变化。我没有在$obj1内使用func的任何引用。可能是这个问题的可能原因是什么?我该如何解决?

$obj2 = func($obj2,$vars);

我应该说我在func之前使用其他功能,并且他们也使用$obj2作为输入。但是,执行后$obj1的内容不会更改。

P.S。当我在Zend Studio中调试此代码并进入func时,Watch list Expressions表示$obj1 = null,但我认为没问题,因为func保存在不同的PHP文件中。

1 个答案:

答案 0 :(得分:4)

考虑一下:

class MyClass
{
  public static $value;

  public function test( $testvalue )
  {
    self::value = $testvalue;
  }
}

$obj1 = new MyClass();
$obj2 = new MyClass();

$obj1->test( 123 );

echo $obj2::value; // this will echo 123!!

$ obj2没有变化,只有$ obj1。静态导致var松散其对象内容,并变为对所有对象“全局”。