php资源是通过引用传递的吗?

2024-02-29

今天我发现除了对象和基元之外,PHP 还有资源 http://php.net/manual/en/language.types.resource.php。文档说明默认情况下php 按值传递名称 http://php.net/manual/en/functions.arguments.php#functions.arguments.by-reference。但我们知道在 PHP 5 中,对象通过句柄引用 http://www.php.net/manual/en/migration5.oop.php,因此当句柄按值传递时,您可以将句柄本身视为引用,从而巧妙地避免了这个问题。

但是关于资源?它们是否像对象一样,只是将句柄本身视为引用,还是它们实际上是在传递时被复制的值?

例如:

/**
 * Close the ftp connection and throw an exception.
 *
 * @hack Because php doesn't have a `finally` statement,
 *       we workaround it to make sure the ftp connection is closed.
 * @param resource $conn FTP Buffer
 * @param Exception $e
 */
function ftpCloseWithException($conn, $e) {
    ftp_close($conn); // <-- Is this the same FTP Buffer resource or a new one?
    throw $e;
}
/**
 * Copy the README file from ftp.mozilla.org or do something equally arbitrary using ftp.
 */
function getMozReadme() {
    try {
        $conn = ftp_connect('ftp.mozilla.org');
        …
    } catch (Exception $e) {
        ftpCloseWithException($conn, $e);
    }
}

不,是他们not默认情况下通过引用传递,在这种情况下它们将像任何其他 PHP 变量一样处理。检查这个例子:

function test($fd) {
    $fd = NULL;
}

$fd = fopen('/tmp/test', 'w+');
test($fd);
var_dump(is_resource($fd)); // bool(true);

...但根据资源的性质,他们指出了single外部资源。这可以是文件、数据库连接或类似的东西。因此,对资源(或其副本)的任何操作都会对其产生直接影响single外部资源。

检查这个例子:

function close($fd) {
    fclose($fd);
}

$fd = fopen('/tmp/test', 'w+');
close($fd);
var_dump(is_resource($fd)); // bool(false);

在上面的示例中,PHP 引擎重置了all文件关闭后在所有范围内对 $fd 的引用。这意味着从这种副作用来看,它们可能并不完全是same作为其他变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php资源是通过引用传递的吗? 的相关文章

随机推荐

  • html5本地数据库位于客户端计算机上的哪里?

    我正在不同的浏览器 Firefox Opera Safari 和 Chrome 上使用 html5 本地存储 我只是想知道我使用 创建的本地数据库的位置在哪里 开放数据库 我可以更改该数据库的位置吗 Gath 它将存储在用户的配置文件目录中
  • jQuery 的 ajax 成功函数的额外参数

    我正在使用以下代码获取 XML 文件 function getMaps toLoad loadMaps length for var i 0 i lt loadMaps length i ajax type GET url loadMaps
  • 为什么“findById()”在同一实体上调用 getOne() 后返回代理?

    在我的网络应用程序中 在服务布局中 我使用 餐厅 实体的代理 餐厅 字段中的 FetchType Lazy User user userRepository get userId Getting proxy here not restaur
  • 如何在 docker 容器中对 elasticsearch.yml 进行简单编辑?

    我在用docker compose as in https github com davidefiocco dockerized elasticsearch indexer blob master docker compose yml ht
  • 为什么 html5 postMessage 对我不起作用?

    我使用几行 javascript 来创建一个 iframe 元素 然后我想向它发送一条消息 如下所示 function loadiframe callback var body document getElementsByTagName b
  • 如何修改和使用R包的函数?

    我的问题是关于如何在 R 中调整 控制树状图中的比例 使用 portfolio 库 https stackoverflow com questions 7561423 how do you adjust control the scale
  • 溢出:滚动;在 中

    为什么 CSS 属性overflow scroll 不工作于 td while overflow hidden 效果很好 table border 1 style width 100px tr td style width 50px 100
  • CF9 中的 QueryNew() 数据类型

    我接管了运行 CF9 0 1 的生产服务器上的系统 但在开发人员版本中找不到该系统的副本 因此我正在运行 CF10 我正在将数据从数据库导出到 Excel 由于数据来自多个数据源 因此需要手动将结果输入到查询中 然后用于输出到 Excel
  • 如何比较/匹配两个不相同的声音片段

    我需要每 5 秒采集一次短声音样本 然后将其上传到我们的云服务器 然后 我需要找到一种方法来比较 检查该样本是否是完整长音频文件的一部分 样本将通过手机麦克风录制 因此它们确实不准确 我知道这个主题可能会变得非常技术性和复杂 但我确信一定有
  • Firestore 写入限制错误代码

    Firestore 目前处于测试阶段 并且有每秒写入次数限制 写入 Firestore 数据库时是否可以检查特定的 Firestore 写入错误代码 我的用例是我需要具有查询可能性的高吞吐量 通过检查写入错误代码 我可以稍后重试写入 根据官
  • 用于具有多种类型的嵌套对象的 RedisTemplate 哈希值序列化器

    我正在尝试使用 Redis 为我的实体存储一些缓存数据 其中包含不同类型的字段 例如 public class Job private String id private Date createTime Long private Strin
  • 使用 SDWebimage 通过 url 一张一张下载图像

    我需要从以下位置下载图像Array网址一一显示并一次显示全部 前任 我有 10 个 URL 的数组 我只需要一张一张地下载图像 并一次显示 我在用SDWebImage用于下载图像 请帮我 Thanks 你可以尝试这样的事情 void dow
  • 如何更新学说中的字段以将其设置为空

    我想将原则中的一个字段设置为 null 这是句子 em this gt getDoctrine gt getManager qb em gt createQueryBuilder query qb gt update Model Examp
  • 最小化 Three.js 抽奖次数

    我正在为我的项目测试 Three js 的使用 http agentscript org http agentscript org 并且第一个测试似乎很慢 https asx vqnhxlahpe now sh test html Thre
  • 通过 3 个下拉过滤器过滤客户记录的更好或优化方法

    我有一个页面名称为 客户列表 aspx我在上面显示客户列表 这也是我的表和类文件 public partial class Customer public int CustomerID get set public string FullN
  • Erlang 中的大型可变字节数组

    当我在 Erlang 中编写一个简单的 Minecraft 服务器应用程序时 我现在关心的问题是如何有效地存储和修改块数据 对于那些不了解 Minecraft 内部结构的人 我需要在内存中存储大量高达 32kB 大小的二进制文件 100 1
  • 将一个数据库复制到另一个数据库

    如何从一个数据库复制到另一个数据库 数据库名称visco 我想将所有表从 visco 数据库复制到新数据库名称 neptune 我创建了一个没有任何表的数据库 然后我尝试从database1 bak 文件恢复数据库 然后它显示错误为 You
  • 针对活动目录中的用户进行身份验证?

    我确实有一个 Web 应用程序 其中有一个登录页面 如何针对 Active Directory 用户进行身份验证 截至目前 我能够从活动目录中获取一些属性 这表明我能够使用 LDAP 字符串与 AD 进行通信 我知道不可能从 AD 中提取密
  • 如何传递上下文?

    我想将主要活动的上下文传递给另一个类以创建 Toast 我的主要活动调用一个将删除文件的类 如果文件不存在 删除文件的类将调用 toast 这是我的代码 public class MyActivity extends AppCompatAc
  • php资源是通过引用传递的吗?

    今天我发现除了对象和基元之外 PHP 还有资源 http php net manual en language types resource php 文档说明默认情况下php 按值传递名称 http php net manual en fu