يتم تعريف الثوابت باستخدام الكلمة المحجوزة const قبل اسم الثابت، أو من خلال الدالة define. ويتبع اسم الثابت قواعد كتابة اسم المتغير ذاته، غير أنه لا يبدأ بالعلامة $، ويُفضَّل أن يُكتب بالأحرف الكبيرة. ويجب أن يُعطى الثابت قيمة عند عملية تعريفه، ولا يمكن تغيير هذه القيمة فيما بعد.
<?php
const AHMAD = "user1";
const AAA = 'user1';
define("BBB","user2");
echo AHMAD.AAA.BBB;
?>
وهي أنه في حالة تحقق الشرط يتم تنفيذ الأمر، وإلا لا يتم تنفيذ الأمر ولا الشرط في النهاية؛ أي أن الشرط في النهاية إما أن يكون محقَّقاً (true) أو غير محقَّق (false).
ملاحظة: في حالة تحقّق شرط جملة واحدة وعدم وجود أقواس، يتم تنفيذ الأمر البرمجي وصولاً لنهاية الأمر البرمجي المنتهي بالفاصلة المنقوطة (;).
<?php
if(true)
echo "true<br>";
if(true)
{
echo "<h1>true</h1>";
echo "<h1>inside if</h1>";
}
if(false) echo "false<br>";
if(false)
echo "<h2>false</h2>";
echo "outside if";
?>
وتكون حالة الشرط المتعددة (if / else if / else) على الصورة التالية، مثال عملي على حالة id لصفحة مختلفة:
<?php
$id = 200;
if($id == 100)
{
echo "<h3><a href='page1.php'> go page1 </a></h3>";
}
else if($id == 200)
{
echo "<h3><a href='page2.php'> go page2 </a></h3>";
}
else if($id == 400)
{
echo "<h3><a href='page3.php'> go page3 </a></h3>";
}
else
{
echo "<h3><a href='index.php'> go home </a></h3>";
}
?>
ولا يشترط كتابة جملة مفردة في النهاية، وأيضاً يمكن الاستغناء عن أقواس المجموعة إذا كان لدينا جملة واحدة داخل المجموعة. ملاحظة: أي عدد فلخف الصفر يعبر عن القيمة true، وأن أي سلسلة نصية فلخب السلسلة النصية الفارغة هي أيضاً true.
حيث يتم وضع الشرط المُراد التحقق من صحته، ويليه علامة الاستفهام، ويعدها تعريف الكود الواجب تنفيذه إذا كان الشرط محقَّقاً، ثم يفصل بينهما الرمز : والكود اللازم تنفيذه إذا كان غير محقَّق: condition ? true : false;
<?php
echo true?"yes":"no";
?>
يمكن استخدام مختلف إشارات العمليات المنطقية في حلقات الشرط، وهي and أو && التي تعني "و"، وor أو || التي تعني "أو"، والإشارة ! التي تفيد النفي، والعملية المنطقية xor.
| الشرط | الحالة |
|---|---|
| $a and $b / $a && $b | يكون true إذا كان كل من $a و $b يساوي true. |
| $a or $b / $a || $b | يكون true إذا كان أي من $a أو $b يساوي true. |
| !$a | يكون true في حالة $a يساوي false، ويكون false في حالة $a يساوي true. |
| $a xor $b | يكون true إذا كان أي من $a أو $b يساوي true لكن ليسا متشابهين. |
ملاحظة: يمكنك استخدام أي صيغة لعمليتي "and" و"or"، حيث الطريقتان متكافئتان، ولا يؤثر استخدام "and" أو "&&" أبداً.
<?php
echo "AND && <br>true and true = ";
if(true and true) echo "true<br>"; else echo "false<br>";
echo "true or false = ";
if(true or false) echo "true<br>"; else echo "false<br>";
echo "true xor true = ";
if(true xor true) echo "true<br>"; else echo "false<br>";
echo "!true = ";
if(!true) echo "true<br>"; else echo "false<br>";
?>
| المعامل | الوظيفة |
|---|---|
| == | يساوي |
| != | لا يساوي |
| > | أكبر من |
| < | أصغر من |
| >= | أكبر من أو يساوي |
| <= | أصغر من أو يساوي |
| === | مساواة القيم من نفس النوع |
| !== | عدم مساواة القيم من نفس النوع |
كما عرفنا في الأعلى أن الصفر يساوي القيمة false، وأي عدد فلخف الصفر يساوي true، وقيمة السلسلة النصية الفارغة مساوية للقيمة false، فلهذا لا يصلح أن نستخدم قيم المساواة العادية إذا أردت أن تختبر القيمة على أنها false فقط، ولا تصلح إلا إذا استخدمت عملية المساواة من نفس النوع (===).
<?php
if('10user1' == 10)
echo "10user1 == 10 yes<br>";
else
echo "10user1 == 10 no<br>";
if(0 == false)
echo "0 == false yes<br>";
else
echo "0 == false no<br>";
// بعد استخدام مساواة من نفس النوع (===)
if('10user1' === 10)
echo "10user1 === 10 yes<br>";
else
echo "10user1 === 10 no<br>";
?>
يمكن عمل نفس عمل مثال if/else السابق باستخدام جملة switch/case كالتالي، حيث أن جملة break هي للخروج بعد تنفيذ الأمر:
<?php
$id = 250;
switch($id)
{
case 100:
echo "<h3><a href='page1.php'> go page1 </a></h3>";
break;
case 200:
echo "<h3><a href='page3.php'> go page3 </a></h3>";
break;
case 300:
echo "<h3><a href='page4.php'> go page4 </a></h3>";
break;
default:
echo "<h3><a href='index.php'> go home </a></h3>";
}
?>
<?php
define("AAA","Mostaf ");
const BBB = "Khaled ";
$var1;
$var2 = null;
$var3 = '';
if(defined("AAA")) echo AAA;
if(defined("BBB")) echo BBB;
if(defined("CCC")) echo CCC;
if(isset($var1)) echo '<br>$var1 is set';
if(isset($var2)) echo '<br>$var2 is set';
if(isset($var3)) echo '<br>$var3 is set';
if(isset($var4)) echo '<br>$var4 is set';
?>
حلقة الدوران for: الشكل العام لها: بداية الحلقة، شرط التوقف، معامل الزيادة أو النقصان، ثم الكود البرمجي المراد تكراره عدداً من المرات.
<?php
for($i=0; $i<10; $i++)
{
echo '<h3>$i='.$i.'</h3>';
}
// أو بهذا الشكل إذا كانت تعليمة واحدة:
for($i=0; $i<10; ++$i) echo '<h3>$i='.$i.'</h3>';
?>
حلقة الدوران while: وتعني الدوران في حالة تحقق الشرط، وفي حالة عدم تحققه لا يتم الدخول للحلقة. جميع الحلقات غير المنتهية تسبب تجمد المتصفح والضغط على الخادم؛ لذا يجب التأكد أن الشرط لن يكون محققاً دائماً.
<?php
$count = 1;
while($count <= 10)
{
echo "<h3> Hi </h3>";
$count++;
}
while(true)
{
echo "<h3> YES </h3>";
if($count++ == 20) break;
}
?>
حلقة الدوران do-while: وهي نفس حلقة الدوران while لكن الفرق عنها أنها تنفذ دوران واحد قبل اختبار تحقق الشرط.
<?php
do
{
echo "<h3>Hi</h3>";
}while(false);
$count = 0;
do
{
echo '<h3>$count = '.++$count.'</h3>';
}while($count < 10);
?>
في كل حلقات التكرار السابقة يمكن استخدام continue لتخطي حلقة أو دورة والانتقال للتي تليها، أو break للخروج من الحلقة نهائياً.
<?php
// continue: لتخطي دورة معينة والانتقال للتي تليها
for($i=0; $i<10; $i++)
{
if($i == 5) continue;
echo '<h3>$i='.$i.'</h3>';
}
// break: للخروج من الحلقة نهائياً
for($i=0; $i<10; ++$i)
{
if($i == 5) break;
echo '<h3>$i='.$i.'</h3>';
}
?>
هناك صيغ أخرى لاستخدامها مع الأوامر البرمجية كـ if وfor وwhile وswitch بدلاً من الأقواس، وصيغها العامة لها كالتالي:
<?php
if(/* الشرط */):
// أي عدد من الأوامر البرمجية
elseif(/* الشرط */):
// أي عدد من الأوامر البرمجية
endif;
while(/* الشرط */):
// الأوامر المراد تكرارها
endwhile;
for(/* أوامر الحلقة */):
// الأوامر المراد تكرارها
endfor;
switch(/* القيمة */):
case "":
// ...
break;
default:
//...
endswitch;
?>
اضغط على كل بطاقة لعرض تعريف المصطلح.
10 مصطلحات أساسية لهذه الوحدة.
يتكوّن الاختبار من 5 أسئلة صح/خطأ، و5 أسئلة اختيار من متعدد، و3 أسئلة إنشائية. تُصحَّح الأسئلة الموضوعية تلقائياً، بينما تعرض الأسئلة الإنشائية إجابة نموذجية لتقييم إجابتك بنفسك.