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

Kdg*_*Dev 2 php smarty

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

$smarty =& new Smarty;
Run Code Online (Sandbox Code Playgroud)

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

此功能签名也是如此:

function connect(&$smarty, $reset = false)
Run Code Online (Sandbox Code Playgroud)

为什么&符号?

Arn*_*rno 15

实际上,这段代码是为了与PHP 4兼容而编写的.&符号在PHP 5中是无用的(正如Tim所说 - 从PHP 5起,所有对象都通过引用传递).

使用PHP 4,所有变量都按值传递.如果您想通过引用传递它,则必须声明引用赋值:

$ref_on_my_object =& new MyObject();
Run Code Online (Sandbox Code Playgroud)

PHP 5默认配置仍然接受此代码,但最好编写:

$ref_on_my_object = new MyObject(); // Reference assignment is implicit
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题,问题"几乎"相同......因为PHP允许你声明函数参数(resp.类型),而你不能为返回值做这件事.一个被接受的,但"不太好"的做法是避免在函数声明中引用声明:

function foo($my_arg) {    
    // Some processing
}
Run Code Online (Sandbox Code Playgroud)

和参考电话...

$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function
Run Code Online (Sandbox Code Playgroud)

理想的宣言更像是:

function foo( & $my_input_arg ) {    
    // Some processing
}
Run Code Online (Sandbox Code Playgroud)

然后,呼叫失去&符号:

$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function
Run Code Online (Sandbox Code Playgroud)