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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532834.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip arc

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip archive: failed finding central directory 原因分析 這個報錯是出現在PyTorch在讀入模型參數時: checkpoint torch.load(epoch_15.pth, map_locationcpu)…

xp搭建 php環境,windows xp 下 LAMP環境搭建

1. apache安裝步驟如下圖在瀏覽器中輸入:localhost,出現下面頁面說明已成功安裝apache。2. mysql安裝如下圖顯示在運行里面輸入cmd ,然后連接測試mysql ,如圖所示:3. php安裝(1)將php壓縮包解壓到安裝路徑中的php目錄…

C++中的虛函數(表)實現機制以及用C語言對其進行的模擬實現

C中的虛函數(表)實現機制以及用C語言對其進行的模擬實現 聲明:本文非博主原創,轉自https://blog.twofei.com/496/,博主讀后受益良多,特地轉載,一是希望好文能有更多人看到,二是為了日后自己查閱。 前言 …

php 前端模板 yii,php – Yii2高級模板:添加獨立網頁

我在backend / views / site下添加了help.php,并在SiteController.php下聲明了一個能夠識別鏈接的函數public function behaviors(){return [access > [class > AccessControl::className(),rules > [[actions > [login, error],allow > true,],[actions > […

C++中數組和指針的關系(區別)詳解

C中數組和指針的關系(區別)詳解 本文轉自:http://c.biancheng.net/view/1472.html 博主在閱讀后將文中幾個知識點提出來放在前面: 沒有方括號和下標的數組名稱實際上代表數組的起始地址,這意味著數組名稱實際上就是…

安裝php獨立環境,0507-php獨立環境的安裝與配置 Web程序 - 貪吃蛇學院-專業IT技術平臺...

1.在一個純英文目錄下新建三個文件夾2.安裝apache(選擇好版本)過程中該填的按格式填好,其余的只更改安裝目錄即可如果報錯1901是安裝版本的問題。檢查:安裝完成后localhost打開為It works!添加到電腦屬性環境變量:3.將php文件解壓文檔放到AMP…

linux中PATH變量-詳細介紹

轉自:https://blog.csdn.net/haozhepeng/article/details/100584451 轉載者勘誤 原文最后提到的 echo 命令對于環境變量的修改無影響。這是肯定的,echo 命令相當于只是一個打印的函數(比如 Python 中的 print)。這里要修改環境變…

php assert eval,代碼執行函數之一句話木馬

前言大家好,我是阿里斯,一名IT行業小白。非常抱歉,昨天的內容出現瑕疵比較多,今天重新整理后再次發出,修改并添加了細節,另增加了常見的命令執行函數如果哪里不足,還請各位表哥指出。eval和asse…

顯卡、顯卡驅動、CUDA、CUDA Toolkit、cuDNN 梳理

顯卡、顯卡驅動、CUDA、CUDA Toolkit、cuDNN 梳理 轉自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型號含義 顯卡: 簡單理解這個就是我們前面說的GPU,尤其指NVIDIA公司生產的GPU系列,因為后面介紹的…

php中msubstr,PHP學習:thinkphp中字符截取函數msubstr()用法分析

《PHP學習:thinkphp中字符截取函數msubstr()用法分析》要點:本文介紹了PHP學習:thinkphp中字符截取函數msubstr()用法分析,希望對您有用。如果有疑問,可以聯系我們。本文實例講述了thinkphp中字符截取函數msubstr()用法…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解決

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解決 轉自:https://blog.csdn.net/ibless/article/details/118610776 1 問題描述 此前,本人參考網上教程在VS Code中配置了“Remote SSH”插件(比如這…

Oracle閃回報錯,oracle 閃回區滿了,ORA-19815

oracle 閃回區滿了,查看日志報錯:ORA-19815,命令行輸入:sqlplus / as sysdbastartup mount //如果你的數據庫出現了無法連接的情況時,可以加上這句select file_type, percent_space_used as used,percent_space_rec…

[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 論文簡析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 論文簡析 論文:https://arxiv.org/abs/2108.05997 代碼:https://github.com/google-research/google-research/tree/master/musiq 概述 當前SOTA的IQA(圖像質量評估&#xff0…

安裝oracle不動了,windows2008安裝ORACLE到2%不動的問題 | 信春哥,系統穩,閉眼上線不回滾!...

最近又有網友遇到在windows2008服務器上安裝ORACLE軟件時到2%就卡住不動的問題,下面是該網友的描述:oralce 11g r2 windows server 2008 R2安裝到最后一步復制數據文件時卡到2% 不走了內存一直飆升求解決這個問題前段時間也有人遇到過,但是他…

手把手教你入門Git --- Git使用指南(Linux)

手把手教你入門Git — Git使用指南(Linux) 系統:ubuntu 18.04 LTS 本文所有git命令操作實驗具有連續性,git小白完全可以從頭到尾跟著本文所有給出的命令走一遍,就會對git有一個初步的了解,應當能做到會用并…

linux修改主機名后oracle em控制臺起不來,更改計算機名后導致Oracle dbconsole無法啟動問題解決方法...

今天不知道哪根筋搭歪了,看著Oracle EM控制臺的主機名WIN-LOSGI0TCOG0亂七八糟的很不爽,就把它給改了。然后Oracle EM就上不去了,Oracledbconsole服務起不來,我嘗試把所有“WIN-LOSGI0TCOG0”替換成“ggsjy”,找了好多…

Shell腳本多行換行報錯:- unrecognized arguments- \

shell error: unrecognized arguments: \ 在使用linux長命令時,我們通常會用一個shell腳本加\分行的形式來更清晰展示參數。 這時有一個注意事項:在\后必須緊跟回車, 否則會導致后面的參數無法傳入。因為這時程序會將后面的參數算作一條新命…

shell腳本長命令帶換行 注釋方法

shell腳本長命令帶換行 注釋方法 命令行傳參 在訓練深度學習網絡時,我們每次實驗通常會有許多超參數需要設置,如batch size, epoch, gpu id, arch甚至還有一些具體的模型結構等。這事我們通常使用python模塊argparse,在命令行進行傳參。 比…

php對中英文字符串進行截取,利用php怎么對中英文混合的字符串進行截取

利用php怎么對中英文混合的字符串進行截取發布時間:2021-01-04 15:31:24來源:億速云閱讀:103作者:Leah利用php怎么對中英文混合的字符串進行截取?很多新手對此不是很清楚,為了幫助大家解決這個難題&#xf…

Linux查找命令find、loacte、whereis、which、type梳理

Linux查找命令find、loacte、whereis、which、type梳理 Linux操作系統中有5種常用的查找命令:find,locate,whereis,which,type,他們分別用于查找不同的東西,本文將就他們各自的功能進行一下梳理…