-1
$a = true;

1,new test($a);

2,new test(true);

それらの間に違いはありますか(1,2)、もしあれば、それは何ですか? ありがとうございました、。

4

3 に答える 3

4

もう1つは変数を使用し、もう1つは使用しません。この場合、これにより致命的なエラーが発生します。

class test {

    public function __construct( &$a )
    {

    }
}

$a = true;

new test($a);

new test(true); //Fatal error because this cannot be passed by reference
于 2012-06-26T11:43:51.860 に答える
1

testクラスのコンストラクターに依存します。通常の値渡しコンストラクターでは、それらはまったく同じです。

class test {
  public $b;
  function __construct($a) { $this->b = $a; }
}

ここで$obj->btrue、予想どおり、両方のステートメントになります。

一方、参照渡し$aの場合、後でグローバルを変更すると、異なる結果が得られる可能性があります。例:

class test {
  public $b;
  function __construct( &$a ) { $this->b = &$a; }
}

$a = true;
$obj = new test($a);
$a = false;

$obj->bfalseの参照であるため、この場合は になり$aます。$a参照を使用すると、コンストラクター内から変更して、逆の方法で行うこともできます。

class test {
  function __construct( &$a ) { $a = false; }
}

$a = true;
$obj = new test($a);

$aグローバルスコープでも false になります!

またnew test(true)、リテラル値への参照はできず、他の変数への参照しかできないため、参照渡しの場合はできません。

于 2012-06-26T11:47:43.960 に答える
1

厳密には、test の定義方法に依存します。

test入力パラメータが参照によって渡されるように が定義されている場合はリテラル値である2ため、致命的なエラーが発生します。true

また、行を実行する順序と問題testを意味する副作用が生じる可能性があります。12

于 2012-06-26T11:45:30.993 に答える