php 5.6 引用传递,升级到5.6.x后如何在php中修复引用传递
我最近将fom php 5.2升级到5.6,并且有一些代码我无法修复:
//Finds users with the same ip- or email-address
function find_related_users($user_id) {
global $pdo;
//print_R($pdo);
//Let SQL do the magic!
$sth = $pdo->prepare('CALL find_related_users(?)');
$sth->execute(array($user_id));
//print_R($sth);
//Contains references to all users by id, to check if a user has already been processed
$users_by_id = array();
//Contains arrays of references to users by depth
$users_by_depth = array();
while ($row = $sth->fetchObject()) {
//Create array for current depth, if not present
if (!isset($users_by_depth[$row->depth]))
$users_by_depth[$row->depth] = array();
//If the user is new
if (!isset($users_by_id[$row->id])) {
//Create user array
$user = array(
'id' => $row->id,
'name' => $row->name,
'email' => $row->email,
'depth' => $row->depth,
'adverts' => array()
);
//Add all users to depth array
@array_push($users_by_depth[$row->depth], &$user);
//Add references to all users to id array (necessary to check if the id has already been processed)
$users_by_id[$row->id] = &$user;
}
//If user already exists
else
$user = &$users_by_id[$row->id];
//Add advert to user
if ($row->advert_id != null)
array_push($user['adverts'], array(
'id' => $row->advert_id,
'title' => $row->advert_title,
'msgs' => $row->msgs,
'url' => $row->url
));
#print_r($user);
//Unset $user variable !!!
//If this is missing, all references in the array point to the same user
unset($user);
}
//Return users, grouped by depth
return $users_by_depth;
}
如果仅删除美元符号前的与号,该功能将停止按预期工作.从关于stackoverflow的其他问题中,我发现这是通过引用进行的调用,对于新的php版本,它将停止.但是我找不到解决方案.
感谢您对如何为php 5.6.x更新此代码的任何帮助
解决方法:
您的代码可能永远无法正常工作,因为您正在抑制array_push()调用中的错误.请注意,只有array_push()的第一个参数通过引用传递,其他值始终按值传递.
您应该删除错误抑制器@(切勿在自己的代码中使用它),在这种情况下,您还可以执行以下操作:
$users_by_depth[$row->depth][] = &$user;
^^ add an element just like `array_push`
现在,您在$users_by_depth中的新值将包含对$user变量的引用.
标签:variables,reference,php
来源: https://codeday.me/bug/20191120/2041320.html
php 5.6 引用传递,升级到5.6.x后如何在php中修复引用传递相关推荐
- string 引用没有设置为 string 的实例。 参数名: s_Java中的值传递和引用传递,看完这篇终于终于明白了!...
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数 ...
- 如何在VS2013中隐藏引用计数?
本文翻译自:How to hide reference counts in VS2013? Visual Studio 2013 introduced a new feature where it s ...
- 【C++基础学习】C++中的引用
[导读]介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面.透彻地阐述 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用,可以使程序简洁.高效. 引用 ...
- 深入探讨C++中的引用(转)
摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面透彻地阐述. 关键词:引用,const,多态,指针 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使 ...
- 深入探讨C++中的引用
原文地址:http://c.chinaitlab.com/cc/example/200806/751367.html 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用 ...
- Java中的函数传递
转载自 Java中的函数传递 在C和C++中,函数的传递可以通过函数指针来实现.在C#中,函数传递可以通过委托.Action.Func来实现.Java中没有函数指针.没有委托,那函数要如何传递呢? ...
- (已解决)Latex--取消正文中参考文献引用的上标显示(gbt7714-2015会导致默认上角标引用)(上角标平齐标混合使用教程)
0 为什么有这个问题,因为我的中文论文无论采用\upcite{}还是\cite{}都是上角标 这是因为GBT7714-2015宏包支持的标注样式:super / numbers / authorye ...
- java中是引用传递还是值传递....
刚才与Z师兄聊天,他提问: 你说java中是引用传递还是值传递啊? 当时俺搞混了这个"传递"的意思, 本来以为是对象的实例化比如: abc a=new abc(); 这个a 是引用 ...
- 【Java基础】Java中的值传递、引用传递
Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...
最新文章
- CUDA 7 流并发性优化
- pgjdbc源码分析
- 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序
- 贝叶斯算法对文本进行分类实例
- java web 配置教程,javaWeb实战教程0-环境配置,javaweb实战教程0-
- 初识Python导图笔记
- HanLP-地名识别调试方法
- IDEA使用教程----超级全
- 计算机导论知识体系,《计算机导论》课程知识体系结构研究
- freemarker 数组转字符串_freemarker中的split字符串分割
- winform 打印快递电子面单_c#对接电子面单打印平台
- 苹果电脑恢复服务器上的安装器信息已被破坏,苹果电脑安装软件显示:映像数据已损坏的解决办法...
- MIT6.S081 2021
- Flowchart流程图示例
- 从Maya中把模型搬运至网页的过程
- 手把手教你玩转android应用Microsoft Remote Desktop
- java反射的作用于原理、初学者
- S7-1200PLC CPU集成模拟量输入通道接线和编程
- python变量与声明
- ARM发布 Cortex-M35P保护物联网智能连接
热门文章
- ant压缩和解压缩工具类
- Linux Shell脚本_关闭防火墙
- tomcat不重启java文件自动编译
- FileZilla 下载安装使用
- 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
- 企业实战06:Oracle数据库_约束
- 使用html5+的plus调起相机拍照,使用canvas压缩图片,转成base64传到后台
- MATLAB灰度级数为1,图像处理 – 在matlab中更改灰度图像中的灰度级数
- mysql查找表shoe table,mysql命令行常用命令
- 如何c51和mdk共存兼容_2020年网站如何做seo优化