我最近将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中修复引用传递相关推荐

  1. string 引用没有设置为 string 的实例。 参数名: s_Java中的值传递和引用传递,看完这篇终于终于明白了!...

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数 ...

  2. 如何在VS2013中隐藏引用计数?

    本文翻译自:How to hide reference counts in VS2013? Visual Studio 2013 introduced a new feature where it s ...

  3. 【C++基础学习】C++中的引用

    [导读]介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面.透彻地阐述 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用,可以使程序简洁.高效. 引用 ...

  4. 深入探讨C++中的引用(转)

    摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面透彻地阐述. 关键词:引用,const,多态,指针 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使 ...

  5. 深入探讨C++中的引用

    原文地址:http://c.chinaitlab.com/cc/example/200806/751367.html 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用 ...

  6. Java中的函数传递

    转载自  Java中的函数传递 在C和C++中,函数的传递可以通过函数指针来实现.在C#中,函数传递可以通过委托.Action.Func来实现.Java中没有函数指针.没有委托,那函数要如何传递呢? ...

  7. (已解决)Latex--取消正文中参考文献引用的上标显示(gbt7714-2015会导致默认上角标引用)(上角标平齐标混合使用教程)

    0  为什么有这个问题,因为我的中文论文无论采用\upcite{}还是\cite{}都是上角标 这是因为GBT7714-2015宏包支持的标注样式:super / numbers / authorye ...

  8. java中是引用传递还是值传递....

    刚才与Z师兄聊天,他提问: 你说java中是引用传递还是值传递啊? 当时俺搞混了这个"传递"的意思, 本来以为是对象的实例化比如: abc a=new abc(); 这个a 是引用 ...

  9. 【Java基础】Java中的值传递、引用传递

    Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...

最新文章

  1. CUDA 7 流并发性优化
  2. pgjdbc源码分析
  3. 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序
  4. 贝叶斯算法对文本进行分类实例
  5. java web 配置教程,javaWeb实战教程0-环境配置,javaweb实战教程0-
  6. 初识Python导图笔记
  7. HanLP-地名识别调试方法
  8. IDEA使用教程----超级全
  9. 计算机导论知识体系,《计算机导论》课程知识体系结构研究
  10. freemarker 数组转字符串_freemarker中的split字符串分割
  11. winform 打印快递电子面单_c#对接电子面单打印平台
  12. 苹果电脑恢复服务器上的安装器信息已被破坏,苹果电脑安装软件显示:映像数据已损坏的解决办法...
  13. MIT6.S081 2021
  14. Flowchart流程图示例
  15. 从Maya中把模型搬运至网页的过程
  16. 手把手教你玩转android应用Microsoft Remote Desktop
  17. java反射的作用于原理、初学者
  18. S7-1200PLC CPU集成模拟量输入通道接线和编程
  19. python变量与声明
  20. ARM发布 Cortex-M35P保护物联网智能连接

热门文章

  1. ant压缩和解压缩工具类
  2. Linux Shell脚本_关闭防火墙
  3. tomcat不重启java文件自动编译
  4. FileZilla 下载安装使用
  5. 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
  6. 企业实战06:Oracle数据库_约束
  7. 使用html5+的plus调起相机拍照,使用canvas压缩图片,转成base64传到后台
  8. MATLAB灰度级数为1,图像处理 – 在matlab中更改灰度图像中的灰度级数
  9. mysql查找表shoe table,mysql命令行常用命令
  10. 如何c51和mdk共存兼容_2020年网站如何做seo优化