PHP:الطباعة غير معروف المتغيرات دون سابق إنذار
سؤال
أنا أتساءل فقط إذا كان هناك طريقة سريعة صدى غير معروف المتغيرات دون الحصول على تحذير ؟ (يمكن تغيير الخطأ في الإبلاغ عن مستوى ولكن أنا لا أريد أن.) أصغر لدي حتى الآن هو:
isset($variable)?$variable:''
لم يعجبني هذا لعدة أسباب:
- انها قليلا "الالفاظ" و معقدة
$variable
تتكرر- مرددا من سلسلة فارغة دائما ما يزعجني.
- بلدي أسماء المتغيرات ربما تكون أطول, على سبيل المثال
$arrayvar['parameter']
المحلول
هل يمكن استخدام ifsetor() مثال مأخوذ من هنا:
function ifsetor(&$variable, $default = null) {
if (isset($variable)) {
$tmp = $variable;
} else {
$tmp = $default;
}
return $tmp;
}
على سبيل المثال:
echo ifsetor($variable);
echo ifsetor($variable, 'default');
هذا لا تولد إشعار لأن المتغير يتم تمريرها من قبل المرجعية.
نصائح أخرى
يمكنك تشغيله مع خطأ قمع المشغل @.
echo @$variable;
ومع ذلك ، فمن الأفضل عدم تجاهل ضبطه المتغيرات.ضبطه المتغيرات يمكن أن تشير إلى وجود خطأ منطقي على السيناريو ، ومن الأفضل لضمان أن جميع المتغيرات المحددة قبل الاستخدام.
echo @$variable;
هذا هو قضية طويلة الأمد مع PHP, أنهم عازمون على إصلاح ذلك مع isset_or()
(أو وظيفة مماثلة) في PHP 6, نأمل أن الميزة سوف تجعل في PHP 5.3 كذلك.الآن يجب عليك استخدام isset()/الثلاثي سبيل المثال في سؤالك ، أو استخدام آخر @ بادئة إلى الصمت الخطأ.IMHO ، هذا هو الظرف الوحيد الذي يبرر استخدام @ في PHP.
أنا لا أقلق حول قضايا السرعة باستخدام echo
مع سلسلة فارغة ، فمن المحتمل أن يكون أكثر تكلفة ألفه في if
شرط من مجرد صدى سلسلة فارغة.
غير معرف المتغيرات شائعة جدا, أقترح عليك تهيئة متغير مع فارغة في البداية
$var = null;
أو تعطيل الإعلام عن الأخطاء لـ الإشعارات:
error_reporting(E_ALL^E_NOTICE);
وقمع الأخطاء باستخدام @-مشغل القوات المترجم إلى تغيير مستوى الخطأ ، وتنفيذ وظيفة ثم تغيير مستوى الخطأ.وهذا يقلل من وقت تشغيل البرامج النصية الخاصة بك.
بناء وظيفة مثل هذا سيقضي على الأقل 3 أسباب:
function echoVar($var, $ret=NULL) {
return isset($var)?$var:$ret;
}
echoVar($arrayvar['parameter']);
ولكن لماذا مرددا غير معروف المتغيرات ؟ هذا يبدو وكأنه ليس جيدا حقا مشفرة...