$a = true;
1,new test($a);
2,new test(true);
它们(1,2)之间有区别吗,如果有,那是什么?谢谢你,。
那么另一个使用变量,另一个不使用。在这种情况下,这会导致致命错误:
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
现在即使在全局范围内也是错误的!
此外,new test(true)
通过引用传递时不可能这样做,因为您不能引用文字值,只能引用其他变量。