按引用返回值

news/2025/1/4 0:30:46/文章来源:https://www.cnblogs.com/xueshi/p/18645155

按引用返回一个值,而不是按值返回。这样就无需为变量建立一个重复的副本。

按引用返回变量的语法与按引用传递变量很类似。不过,并不是在参数前加一个&,要把&放在函数名前面:
// 定义一个名为array_find_value的函数,它接受两个参数:
// $needle(要查找的值,按值传递)和&$haystack(要搜索的数组,通过引用传递)。
// 注意:通常,如果函数不需要修改传入的数组,最好通过值传递数组以避免不必要的引用开销。
// 在这个特定的函数中,通过引用传递数组并没有明显的优势,因为函数没有修改数组。
function &array_find_value($needle, &$haystack){
// 使用foreach循环遍历$haystack数组中的每个元素。
// $key是当前元素的键,$value是当前元素的值。
foreach($haystack as $key => $value){
// 检查当前元素的值是否等于要查找的值$needle。
if($needle == $value){
// 如果找到了匹配的值,返回该值所在的数组元素。
// 注意:这里应该直接返回$value,因为$haystack[$key]和$value是等价的,并且这样做更清晰。
// 更重要的是,由于函数声明时使用了&(引用返回),这里实际上返回的是对数组元素的引用,
// 这可能导致意外的行为,特别是如果返回的引用被修改的话。
// 在这个上下文中,使用引用返回可能是不必要的,并且可能导致混淆。
return $haystack[$key]; // 应该改为 return $value; 除非有特定理由需要返回引用。
}
}

// 如果循环结束还没有找到匹配的值,函数应该有一个返回语句来处理这种情况。
// 在这个原始代码中,缺少了一个默认的返回语句,这会导致在没有找到匹配项时函数的行为未定义。
// 一种常见的做法是返回null(或者false,取决于函数的设计意图),以指示没有找到匹配项。
// 注意:由于函数声明了引用返回,这里不能直接返回null或false(它们是值),而应该考虑其他方式处理这种情况。
// 一种解决方案是抛出一个异常,或者修改函数签名以不使用引用返回。
// 例如:return null; // 这在引用返回的函数中是不合法的,会导致错误。

}

$minnesota = array('Bob Dylan','F. Scott Fitzgerald','Prince','Charles Schultz');

$prince =& array_find_value('Prince', $minnesota);
$prince = '0(+>'; //Prince名字中不能正确发音的符号的ASCII版本
print_r($minnesota);

/////////////////////////////////////////////////////////////////////////////////////
// 注意:由于上述原因,这个函数需要一些修改才能更安全、更有效地使用。
// 下面是一个改进后的版本,不使用引用返回,并且在找不到匹配项时返回null:
function array_find_value($needle, $haystack){
foreach($haystack as $value){
if($needle == $value){
return $value; // 直接返回找到的值
}
}
return null; // 如果没有找到匹配项,返回null
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/862144.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球绵羊的群体结构

001、野生群体+驯化群体 002、驯化群体

.NET Aspire: Scalar displays API instance url when accessing via proxy

aspire Scalar 端口异常 解决方案app.MapScalarApiReference(options => {options.Servers = Array.Empty<ScalarServer>(); });链接 .NET Aspire: Scalar displays API instance url when accessing via proxy scalar/scalar Discussion #4025 GitHub

自动评估基准 | 技巧与提示

过去几年,大语言模型 (LLM) 的进程主要由训练时计算缩放主导。尽管这种范式已被证明非常有效,但预训练更大模型所需的资源变得异常昂贵,数十亿美元的集群已经出现。这一趋势引发了人们对其互补方法的浓厚兴趣, 即推理时计算缩放。推理时计算缩放无需日趋庞大的预训练预算,…

2.快速入门

2.1引入JavaScript

基于PPO强化学习的buckboost升降压电路控制系统matlab仿真,对比PID控制器

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要随着电力电子技术的不断发展,Buck-Boost 升降压电路在各种电源转换和能量管理系统中得到了广泛应用。传统的 Buck-Boost 电路控制方法通常基于…

《计算机组成及汇编语言原理》阅读笔记:p160-p176

《计算机组成及汇编语言原理》学习第 12 天,p160-p176 总结,总计 17 页。 一、技术总结 1.PowerPC (1)programming model(mode) As in most modern computers, there are at least two separate views of the system (formally called programming models, also often call…

电路相关知识

1、二极管 把磷原子掺入硅原子中,外层多了一个电子,这个电子只需要很少能量成为自由电子 因为自由电子带负电,惨了磷的带负电的半导体成为N型半导体(Negative)。 把硼原子参杂进去,硼原子最外层缺少一个电子,形成空穴,空穴吸引电子 ,对外呈现正电,掺杂了硼原子显正电…

MyBatis-Plus BaseMapper 实现原理

原文:MyBatis-Plus 的 BaseMapper 实现原理MyBatis-Plus 自定义通用 Mapper 方法 MyBatis-Plus 提供了一些通用的 Mapper 方法,例如insert、update、selectById等。通过让自定义的 Mapper 继承BaseMapper类,我们可以直接调用这些基础的 SQL 方法,而无需自己编写 SQL。 publ…

2024 年终总结

2024年终总结昨天英语听力考试时又享受了它的轻松明快,于是年终总结每个部分之间都会有它五线谱的一小节?猜出来这是什么的可以分享在评论区! 遵循一个“写不出来可以不写”的原则,咱少写一些。 这一年几乎所有的学术精力都投入给了大模型。组里做的是 LLM agent,在 Tence…

Everything(文件快速搜索工具)v1.4.1.1026

Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件。如果你用过Windows自Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件。如果你用过Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,都因为速度或其他原因而…

Anyviewer(傲梅免费远程桌面软件) v4.6.0

AnyViewer是一款免费、安全、快速的远程桌面控制软件,可以通过AnyViewer访问你家里、办公室电脑,实现其远程操作;可以帮您远程办公、玩游戏、登录云桌面,以及远程技术支持等。 支持的操作系统 Microsoft Windows 7(所有版本,32 位和 64 位) Microsoft Windows 8.1(所有…

Escrcpy(手机投屏) v1.28.3 便携版

Escrcpy 是一款强大的工具,它允许用户通过图形化的 Scrcpy 界面来显示和控制他们的 Android 设备。这款应用程序由 Electron 作为其底层框架驱动。Escrcpy 无需任何账户就可以使用,无需担心隐私或安全问题。Escrcpy没有广告,完全免费开源。 软件特色 同步:得益于 Web 技术,…