$a = true;
1,new test($a);
2,new test(true);
它们之间是否存在差异(1,2),如果有,它是什么?谢谢,
答案 0 :(得分:4)
那么另一个使用变量而另一个不使用变量。在这种情况下,这会导致致命错误:
class test {
public function __construct( &$a )
{
}
}
$a = true;
new test($a);
new test(true); //Fatal error because this cannot be passed by reference
答案 1 :(得分:1)
严格来说,这取决于测试的定义方式。
如果test
定义为输入参数为passed by reference,那么2
会引发致命错误,因为true
是一个字面值。
此外,test
可能会产生副作用,这意味着您执行第1
行和2
行的顺序很重要。
答案 2 :(得分:1)
这取决于test
类的构造函数。在常规的按值传递构造函数中,它们完全相同:
class test {
public $b;
function __construct($a) { $this->b = $a; }
}
此处,$obj->b
对于您的两个陈述都是true
,正如预期的那样。
另一方面,如果您passing by reference,如果稍后更改全局$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)
,因为您不能引用文字值,只能引用其他变量。