سؤال

أنا أتساءل فقط إذا كان هناك طريقة سريعة صدى غير معروف المتغيرات دون الحصول على تحذير ؟ (يمكن تغيير الخطأ في الإبلاغ عن مستوى ولكن أنا لا أريد أن.) أصغر لدي حتى الآن هو:

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']);

ولكن لماذا مرددا غير معروف المتغيرات ؟ هذا يبدو وكأنه ليس جيدا حقا مشفرة...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top