$a = true;
1,new test($a);
2,new test(true);
それらの間に違いはありますか(1,2)、もしあれば、それは何ですか? ありがとうございました、。
$a = true;
1,new test($a);
2,new test(true);
それらの間に違いはありますか(1,2)、もしあれば、それは何ですか? ありがとうございました、。
もう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
test
クラスのコンストラクターに依存します。通常の値渡しコンストラクターでは、それらはまったく同じです。
class test {
public $b;
function __construct($a) { $this->b = $a; }
}
ここで$obj->b
はtrue
、予想どおり、両方のステートメントになります。
一方、参照渡し$a
の場合、後でグローバルを変更すると、異なる結果が得られる可能性があります。例:
class test {
public $b;
function __construct( &$a ) { $this->b = &$a; }
}
$a = true;
$obj = new test($a);
$a = false;
$obj->b
へfalse
の参照であるため、この場合は になり$a
ます。$a
参照を使用すると、コンストラクター内から変更して、逆の方法で行うこともできます。
class test {
function __construct( &$a ) { $a = false; }
}
$a = true;
$obj = new test($a);
$a
グローバルスコープでも false になります!
またnew test(true)
、リテラル値への参照はできず、他の変数への参照しかできないため、参照渡しの場合はできません。
厳密には、test の定義方法に依存します。
test
入力パラメータが参照によって渡されるように が定義されている場合、はリテラル値である2
ため、致命的なエラーが発生します。true
また、行を実行する順序と問題test
を意味する副作用が生じる可能性があります。1
2