0

同一类有两个对象:

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

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

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

我应该说我之前使用了其他功能func,它们也$obj2用作输入。但是,在他们执行之后$obj1get 的内容并没有改变。

PS 当我在 Zend Studio 中调试这段代码并进入 func 时,Watch list Expressions 会说$obj1 = null,但我认为这很好,因为func它保存在不同的 PHP 文件中。

4

1 回答 1

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 进行了更改。static 导致 var 失去其对象内容,并成为所有对象的“全局”。

于 2012-09-10T20:23:49.253 回答