如果我用引用覆盖原始变量,内部会发生什么?
意思是这么糟糕,是否需要额外的时间或资源?
<?php
function db(){
global $db;
if( empty($db)) $db = new PDO('sqlite:/tmp/default.db3');
return &$db;
}
$db = db();
?>
最佳答案
如果你使用
global $db;
这会将全局变量 $db
导入本地范围。
然后它作为另一个变量存在(代表全局变量)。您最终尝试返回对该变量的引用:
return &$db;
但这不是return by reference .相反,您只需返回值。
然后您用它自己的值在全局变量表上覆盖 $db
。这就是这里发生的一切。
does it cost extra time or resources?
您所做的一切多余的事情都会花费额外的时间或资源。然而 PHP 有一个称为写时复制 (COW) 的优化,所以通常您不需要太在意这里。 PHP 可以很好地消除负担。
就代码中涉及的对象而言。只需这样更改即可:
<?php
$db = new PDO('sqlite:/tmp/default.db3');
?>
然后把db对象传到需要的地方。保持简单,愚蠢。
关于php - 如果我用引用覆盖原始变量,内部会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828341/