لماذا لا يتم تنفيذه البيان المقابل حتى إذا طباعت الصدى فارغة ($ الموقع) 1

StackOverflow https://stackoverflow.com/questions/1895545

سؤال

echo empty($location);
switch($location){
    case (empty($location)):
expression 1;
    break;
    case ($location%10000==0):
expression 2;
    break;
    case ($location%100==0):
expression 3;
    break;
    default:
    expression 4;
    break;

}

عندما أيقظي (موقع $)، فإنه يطبع 1، لماذا تعتبر التعبير 1 غير منفذ؟

هل كانت مفيدة؟

المحلول

أنت لا تستخدم بيانات التبديل بشكل صحيح. الطريقة التي يعملون بها هي مقارنة كل قيمة في كل حالة ضد الأولي switch القيمة.

في قضيتك، دعونا نتظاهر $location = null;

echo empty($location);    // true: null is considered empty.

switch ($location) {
    case empty($location) :    // this performs the check:
                               // $location == empty($location)
                               //      null == true ==> false

لهذا السبب لا يعمل ..

أود أن أوصي بالالتزام if .. else في هذه الحالة.

نصائح أخرى

ال empty وظيفة إرجاع قيمة منطقية من 1 أو 0 http://uk3.php.net/empty.

في حين أن switch / case البيانات تحقق ما إذا كان المتغير يحمل قيمة معينة وتنفيذ تعبير اعتمادا على ذلك

في حالتك expression 1 يجب أن تنفذ إذا كانت قيمة $location==1 (طلبت بشكل فعال لذلك عندما كتبت switch($location)),

لذلك منطق رمزك أعلاه هو:

إذا $ الموقع == 1، تنفيذ التعبير 1
إذا $ موقع٪ 10000 == 0، تنفيذ التعبير 2
إلخ.

هي قيمة $location==1?

أ switch البيان ليس هو نفسه if/else بيان. تبحث ببيانات التبديل عن قيم محددة. إذا وجدت القيمة المحددة في معين case بيان، يدير الشفرة بعد ذلك case بيان.

الرمز التالي:

switch($x)
    case 1:
        // some stuff
        break;
    case 2:
        // some other stuff
        break;
    default:
        // some more stuff
        break;

هو ما يعادل هذا الرمز:

if($x == 1){
    // some stuff
}
elseif($x == 2){
    // some other stuff
}
else{
    // some more stuff
}

في الأساس، switch البيانات هي اختصارات ل if/elseif/else كتل حيث تقوم بالتحقق من مساواة متغير واحدة ضد مجموعة من الاحتمالات.

حيث empty() إرجاع 0 أو 1، الخاص بك الأول case سيتم تشغيل إذا $location هو 1 (إذا $location فارغة) أو 0 (إذا $location ليست فارغة). يبدو أنك كتبت ما يلي:

elseif($location == empty($location)){ ...

منطقي؟ بدلا من استخدام switch بيان، ربما تريد ما يلي:

if(empty($location)){
    // ...
}
elseif($location % 10000 == 0){
    // ...
}
// ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top