我可能应该有,但我以前从未见过这个。查看Smarty插件的文档时,请进入它。
$smarty =& new Smarty;
=&特别签字。如果您在Google中输入它,它就会被忽略,就像任何其他搜索引擎一样。这是用来做什么的?
此功能签名也是如此:
function connect(&$smarty, $reset = false)
为什么&符号
答案 0 :(得分:16)
实际上,这段代码是为了与PHP 4兼容而编写的。&符号在PHP 5中是无用的(正如Tim所说 - 从PHP 5起,所有对象都通过引用传递)。
使用PHP 4,所有变量都按值传递。 如果您想通过引用传递它,则必须声明引用赋值:
$ref_on_my_object =& new MyObject();
这个代码仍然采用PHP 5默认配置,但最好写一下:
$ref_on_my_object = new MyObject(); // Reference assignment is implicit
对于你的第二个问题,问题“几乎”相同...... 因为PHP允许您声明函数参数(resp。类型),并且您不能为返回值执行此操作。 一个被接受的,但“不太好”的做法是避免在函数声明中引用声明:
function foo($my_arg) {
// Some processing
}
并使用引用调用...
$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function
理想的宣言更像是:
function foo( & $my_input_arg ) {
// Some processing
}
然后,呼叫失去&符号:
$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function
答案 1 :(得分:12)
答案 2 :(得分:4)
&
passes an argument by reference。以这种方式,connect()
可以操作$smarty
对象,以便调用函数可以检索修改后的对象。
同样,=&
通过引用设置变量。
答案 3 :(得分:3)
蒂姆说它是对变量的引用。但是如果您使用的是最新版本的PHP,那么无论如何都会通过引用传递所有类对象。如果你传递数组或其他内置类型,你仍然需要这个。
答案 4 :(得分:2)
第一个例子是返回引用,第二个是传递引用。
您可以在PHP manual
中阅读所有相关内容答案 5 :(得分:1)
& 是PHP的参考运算符。它用于返回对象的引用。在这种情况下,“新Smarty”。
答案 6 :(得分:0)
&符号将分配对变量的引用,而不是对象的值。
答案 7 :(得分:0)
&号运算符的主要用途之一是传递内存地址。当您想要更改变量但不返回变量时,通常会执行此操作。
function test_array(&$arr) { $varr[] = "test2"; } $var = array('test'); test_array($var); print_r($var); this should output array( test , test2 );
这通常是在您需要将正在使用的实际副本[内存地址]传递给另一个函数/对象时。通常它过去用于减轻内存不足和提高性能,它是C / C ++和其他一些低级语言的一个特性。