بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الدرس سنتعلم كيفية كتابة جمل شرطية قصيرة دون استخدام جملة If الشرطية ..
من المألوف لدى المعظم تداول الجمل الشرطية بهذه الصيغة :
كود PHP:
if (expression) {
// statements
}
سنأخذ مثال ثم نحوّله إلى الطريقة التي سنتعلمها هذا اليوم :
كود PHP:
$a = "1";
$b = "2";
if ($b > $a) {
echo '$b is bigger than $a';
} else {
echo '$a is bigger than $b';
}
قمنا في البداية في السطر الأول من الكود تعريف المتغير الذي قمنا بتسميته a وأعطيناه القيمة 1
وكذلك في السطر الثاني قمنا بتعريف المتغير باسم b وقيمته 2
الآن قمنا بكتابة جملة شرط تحتوي على جملة If في السطر الرابع من الكود ..
ففي السطر الأول من جملة الشرط If قمنا بوضع تعبير Expression يقوم باختبار إذا كانت قيمة المتغير b$ أكبر من المتغير a$ فإذا تحقق الشرط يتم طباعة جملة :
b is bigger than $a$
ثم إذا فشل الشرط (أي لم يتحقق) يقوم مترجم السيرفر بطباعة النص :
a is bigger than $b$
لاحظ في الجمل المطبوعة بعد دالة echo قمنا بكتابتها بين علامتي التنصيص المفردة وليس المزدوجة أي ' وليس " وذلك لتجنب طباعة محتويات المتغيرات حيث أن العلامة المزدوجة تقوم بطباعة قيم المتغيرات المكتوبة بينها أي تطبع 1 بدلاً من a$ و 2 بدلاً من b$
إلا أن العلامة المفردة تقوم بطباعة النص كما هو دونما تغيير أي a$ تطبع a$ و b$ تطبع b$
طبعاً في هذه التجربة سيكون الناتج :
b is bigger than $a$
ماذا لو أردنا اختصار كل ذلك (أي جملة الشرط كاملة) بسطر واحد ،، يمكن استخدام الكود هذا:
كود PHP:
if ($b > $a) { echo '$b is bigger than $a'; } else { echo '$a is bigger than $b'; }
عفواً ، لم أقصد ذلك ، لكني تذكرت أنه يمكننا عمل ذلك وتنتهي المشكلة !!
سوف نتعلم الآن طريقة أخرى وأفضل نوعاً ما لاختصار السطر نفسه مرة أخرى:
كود PHP:
echo ($b > $a ? '$b is bigger than $a' : '$a is bigger than $b');
ماذا لو حذفنا الأقواس من الجملة ؟؟ لا شك أنها لن تغير من معنى الكود ، فلنجرب ذلك :
كود PHP:
echo $b > $a ? '$b is bigger than $a' : '$a is bigger than $b';
سيبدو الكود هكذا نوعاً من الأكواد الغير مفهومة للمبتدئين ، لذا ، قم باستخدامه في برامجك لتبدو أكثر احترافاً ..!!
لقد نسيت شيئاً هاماً .!! هل تعرف ما هو؟؟! نسيت أن أشرح الكود الجديد .!!
في الكود الجديد سواء الذي يحوي أقواساً أم لا فقد قمنا بكتابة الشرط أو التعبير Expression بعد دالة echo طبعاً إذا كنا نريد المساواة نضع إشارة == وليس = وبقية الإشارات حسب مقياس الإشارات في البي إتش بي ...
ثم نضع علامة سؤال (؟) بعد الشرط والتي تعني أن النتيجة في حالة تحقق الشرط ستكون بعد علامة السؤال هذه ..
أي أنك ستكتب نتيجة تحقق الشرط بعدها ، ثم نضع النقطتين الرأسيتين ( ونكتب النتيجة في حال عدم تحقق الشرط ...
تساؤل غريب !! ::
ببساطة سأترك الحقل الأخير فارغاً وسأستغني عن النقطتين الرأسيتين ( في النهاية لأني لا أريد طباعة شيء في حال عدم تحقق الشرط ،،!!
كود PHP:
echo $b > $a ? '$b is bigger than $a';
عفواً ، سأخبرك ماذا سيحدث عند ذلك ، في ذلك الوقت ستظهر لك رسالة في البي إتش بي قريبة من هذه :
Parse error: parse error in xxx on line xx
هذا يعني وجود خطأ كبير في الكود أدى إلى توقف تنفيذ أكواد الصفحة التالية !!
فلنجرب إذاً إعادة إشارة ( وبعدها سنترك فراغاً (أي لن نكتب شيئاً بعدها سوا ..
كود PHP:
echo $b > $a ? '$b is bigger than $a' : ;
لا تجرب ، فذلك سيظهر لك نفس الخطأ:
Parse error: parse error in xxx on line xx
إذاً، ما الحل ؟؟؟!
جرب الحل التالي:
كود PHP:
echo $b > $a ? '$b is bigger than $a' : '';
لقد قمنا بوضع علامتي تنصيص ' و' متتاليتين ولم نكتب فيها شيئاً وهذا معناه عند عدم تحقق الشرط لا تطبع شيئاً ...
وهذا اختصار لذلك العناء الشديد .....!!
في هذه الحالة أنصحك أيضاً بنوع آخر من الجمل الشرطية ، شبيه بهذا :
كود PHP:
if ($b > $a) echo '$b is bigger than $a';
هذا النوع من الجمل الشرطية المنقوصة ...!!!!
حيث اننا لم نستخدم الأقواس المعوجة { } هنا نكتب الشرط بين الأقواس بعد If وبعد الأقواس نضع نتيجة الشرط ..!!
لكن ، ماذا لو قمنا بالضغط على المفتاح الذهبي (Enter) ثم كتبنا كوداً آخر ؟؟!
هذا سيخبرك بالفشل !!
لا تعجب ، لن تظهر لك رسالة خطأ .. وإنما سيظهر الكود الذي كتبته بعد النتيجة في سطر آخر دائماً ، حيث أنه لن يعتبر داخل جملة الشرط If وسيتم تنفيذه بمفرده ..
ماذا عن الكود التالي:
كود PHP:
if ($b > $a)
echo '$b is bigger than $a';
نعم، إنه كود صحيح، حيث أنا نزلنا سطراً للأسفل لكن قبل كتابة النتيجة ولو نزلنا سطراً آخر بعد النتيجة وأكملنا النتيجة فلن تعتبر داخل الجملة الشرطية ......
ستخبرني بأنك أعجبت إعجاباً شديداً في هذه الطريقة من الكتابة التي تبدو كشكل "أقرع" لعدم احتوائها على { و } وعدم مرونة التعامل معها ...!!
لكن كيف تطبع جملة ما عند عدم تحقق الشرط في مثل هذا النوع من الجمل ؟؟
خذ هذا الكود :
كود PHP:
if ($b > $a)
echo '$b is bigger than $a';
else
echo '$a is bigger than $b';
قمنا بكتابة else في الأسفل ثم كتبنا نتيجة عدم تحقق الشرط ....
يمكننا ضم الكود كاملاً في سطر واحد ، فمترجم PHP ذكي للغاية فيفهم هذا الكود بالطريقة الصحيحة :
كود PHP:
if ($b > $a) echo '$b is bigger than $a'; else echo '$a is bigger than $b';
يبدو الكود السابق جميل جداً لتعقيد طريقة كتابته ....!!
في جميع الحالات قمنا بكتابة تعبير (شرط) Expression ونتيجة في حال تحقق الشرط أو التعبير وأحياناً نتيجة عند عدم تحقق الشرط ....
هذه عدة نماذج لكتابة الجمل الشرطية ..
سأقوم بكتابة المزيد عن هذه الجمل إن شاء الله إن أسعفني الوقت بعد الكتابة عن بعض الدوال والخصائص الأخرى .!!
بقلم : أشرف السمهوري (sBForum)