如果我用引用覆盖原始变量,内部会发生什么?
意思是这很糟糕,是需要额外的时间还是资源?

<?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。这就是这里发生的一切。
它需要额外的时间或资源吗?
你做的每件多余的事都需要额外的时间或资源。但是php有一个名为copy-on-write(cow)的优化,所以通常您不需要太在意这里。php很好地减轻了负担。
就代码中涉及的对象而言。换成这样:
<?php

$db = new PDO('sqlite:/tmp/default.db3');

?>

然后在需要的地方传递db对象。保持简单和直接。

关于php - 如果我用引用覆盖原始变量,内部会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11828341/

10-11 22:05
查看更多