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

标签 php smarty

我可能应该有,但我以前从未见过。在查看 Smarty 插件的文档时遇到了它。

$smarty =& new Smarty;

特别是 =& 符号。如果你在谷歌中输入它,它会被忽略,就像任何其他搜索引擎一样。这是做什么用的?

这个函数签名也是如此:

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

为什么是 & 符号?

最佳答案

实际上,这段代码是为了与 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

关于php - 我以前从未遇到过的 PHP 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1859133/

相关文章:

javascript - 来自 SMARTY 和 Controller 初始化的 AngularJS 集合

PHPUnit:smarty 模板的代码覆盖率

php - 密码哈希在开发和实时服务器中不同

php - MySQL 获取行,其中不会只包含特定的字符串/单词

php - 在大多数线程之后排序类别

php - SmartyWhere子句不过滤数据

php - 获取分别存在于另一个表中且具有空值的记录数

php - 如何在Smarty中使用str_replace

php - 在 $_SERVER PHP,Codigniter,Load Balancer 后面的服务器中没有获得 https = on

php - XML 和 PHP 空白的诅咒