اذهب إلى المحتوى
  • 0

خطأ Only variables should be passed by reference في PHP؟

Emad Saif

السؤال

أحاول الحصول على اسم الملف من المسار الخاص به بالشكل التالي:

<?php

$file_path = "/path/to/image.png";
$file_name = end(explode('/', $file_path));
echo $file_name;

لكن يظهر الخطأ التالي:

Notice: Only variables should be passed by reference in /home/user/scripts/code.php on line 4
image.png

ما سبب هذا الخطأ؟ وكيف أقوم بإصلاح هذه المشكلة؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

هذا ليس خطأ، فهو إشعار. 

ويتم اخراج هذا الإشعار لأن الوظيفة end () تتوقع مرجعًا reference لشيء تريد تغييره والذي يتوقع ان يكون متغيرا، في حين انك تقوم بإسناد التعريف مباشرة. أي انه لن يمكنك تمرير نتيجة explode مباشرة اليها دون حفظها في متغير اولا واستدعاءها بمرجعية هذا المتغير. ففي المثال الذي لديك هي متواجدة في الذاكرة ولا يشير اليها أي متغير وبطبيعة الحال فإنه لن يمكنك انشاء اشارة اليها. 

ولذلك فإن الحل الأول هو انشاء مرجع، او بمعنى آخر تخزين الخرج في متغير وتمريره كمعامل للوظيفة end. 

كحل آخر، يمكنك تجاهل هذا الإشعار والتغاضي عما يخرجه مباشرة ويكون ذلك عن طريق استخدام عامل التجاهل:

$file_name = @end(explode('/', $file_path));

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

 سبب الخطأ: لو لاحظ رسالة الخطأ فهي أنه يجب تمرير المتغيرات فقط من خلال المرجع , وبناء على ذلك يمكنك اسناد قيمة explode الى متغير ليكن اسمه 

$tmp=explode('/', $file_path)

ثم تمرير المتغير الى end كالتالي

$file_name = end($tmp);

النتيجة

image.png

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...