php - 如果我用引用覆盖原始变量,内部会发生什么?

标签 php variables reference

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

<?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/

相关文章:

c# - 为什么我无法访问 C :\WINDOWS\assembly\GAC Folder?

php - 如何使用虚拟文件夹结构url

php - 如何在 laravel 5.8 中使用批量分配上传图像?

javascript - JS - Canvas - 同时在两个 Canvas 上绘制 - ?馈送两个变量?

python - 如何获取元素在列表中出现的次数 Python

c++ - 从类型 'int&' 的临时类型 'int' 的非常量引用的无效初始化

java - Java/Eclipse 中的 NoClassDefFound 错误 : How do I make a clean and easy reference to another project?

php - PHP单引号、双引号和Mysql查询

php - 计算php中关联数组中值的出现

linux - sed 和转义 bash 变量的奥德赛