การอ้างอิงตัวแปรควรส่งคืนโดยการอ้างอิง - Codeigniter


173

หลังจากอัปเกรด PHP เซิร์ฟเวอร์ฉันได้รับข้อผิดพลาดต่อไปนี้กับ PHP เวอร์ชัน 5.6.2 บน Apache 2.0

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

คำตอบ:


450

แก้ไขชื่อไฟล์: core / Common.php, หมายเลขบรรทัด: 257

ก่อน

return $_config[0] =& $config; 

หลังจาก

$_config[0] =& $config;
return $_config[0]; 

ปรับปรุง

เพิ่มโดย NikiC

ในนิพจน์การกำหนดค่า PHP จะส่งคืนค่าที่กำหนดเสมอ ดังนั้น $ _config [0] = & $ config จะส่งกลับ $ config - แต่ไม่ใช่ตัวแปร แต่เป็นสำเนาของค่า และการคืนค่าการอ้างอิงถึงค่าชั่วคราวจะไม่มีประโยชน์อย่างยิ่ง (การเปลี่ยนแปลงนั้นจะไม่ทำอะไรเลย)

ปรับปรุง

การแก้ไขนี้รวมเข้ากับ CI 2.2.1 ( https://github.com/bcit-ci/CodeIgniter/commit/69b02d0f0bc46e914bed1604cfbd9bf74286b2e3 ) เป็นการดีกว่าที่จะอัปเกรดแทนที่จะแก้ไขไฟล์เฟรมเวิร์กหลัก


2
hiya ... อธิบายได้ว่าทำไมถึงทำเช่นนี้? มันใช้งานได้และฉันไม่รู้ว่าทำไม: p
GuyFreakz

4
@GuyFreakz ในนิพจน์การมอบหมาย PHP จะส่งคืนค่าที่กำหนดเสมอ ดังนั้น$_config[0] =& $configจะส่งกลับ$config- แต่ไม่ใช่ตัวแปร แต่เป็นสำเนาของค่า และการคืนค่าการอ้างอิงถึงค่าชั่วคราวจะไม่เป็นประโยชน์โดยเฉพาะอย่างยิ่ง (การเปลี่ยนแปลงจะไม่ทำอะไรเลย)
NikiC

ใช่ ... นั่นเป็นสิ่งที่ดี! ฉันไม่รู้เลยว่าทำไมมันถึงทำให้สิ่งต่าง ๆ ปรากฏออกมาได้ ... : D
gumuruh

4
นี้ได้รับการรวมอยู่ใน CI https://github.com/bcit-ci/CodeIgniter/commit/69b02d0f0bc46e914bed1604cfbd9bf74286b2e32.2.1 ดีกว่าที่จะอัปเกรดเหมือนที่ @Chad ได้กล่าวถึง
Syakur Rahman

1
ฉันใช้ codeigniter เวอร์ชันเก่า (2.0.2) เมื่อฉันลองแก้ไขปัญหานี้ในบรรทัด 243 (นั่นคือที่ที่มันปรากฏในเวอร์ชันของฉัน) - ฉันได้รับข้อผิดพลาด php 500 มีความคิดใดที่ฉันจะทำงานนี้ได้บ้าง?
JoeM05

8

สิ่งนี้ได้รับการแก้ไขใน codeigniter 2.2.1 ... โดยปกติแล้ววิธีที่ดีที่สุดในการแก้ไขไฟล์หลักไม่ได้ฉันจะตรวจสอบการอัปเดตเสมอและ 2.2.1 จะออกมาในเดือนมกราคม 2015


1

ไม่ใช่ความคิดที่ดีที่จะแทนที่ไฟล์ core.common ของ codeigniter เพราะนั่นคือไฟล์ทดสอบและระบบที่มากกว่า ...

ฉันแก้ปัญหาสำหรับปัญหานี้ ในไฟล์ ckeditor_helper.php ของคุณ บรรทัดที่ 65

if($k !== end (array_keys($data['config']))) {
       $return .= ",";
}

เปลี่ยนเป็น ->

 $segment = array_keys($data['config']);
    if($k !== end($segment)) {
           $return .= ",";
    }

ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดแล้วการแจ้งปัญหาของคุณจะหายไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.