لماذا لا يتم تنفيذه البيان المقابل حتى إذا طباعت الصدى فارغة ($ الموقع) 1
-
19-09-2019 - |
سؤال
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){
// ...
}
// ...