PHP中的符号我以前从未遇到过

时间:2009-12-07 10:26:37

标签: php smarty

我可能应该有,但我以前从未见过这个。查看Smarty插件的文档时,请进入它。

$smarty =& new Smarty;

=&特别签字。如果您在Google中输入它,它就会被忽略,就像任何其他搜索引擎一样。这是用来做什么的?

此功能签名也是如此:

function connect(&$smarty, $reset = false)

为什么&符号

8 个答案:

答案 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 ++和其他一些低级语言的一个特性。