الفرق بين المراجعتين لصفحة: «PHP/Control Structures»
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
لا ملخص تعديل |
||
(15 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:بنى التحكم في PHP}}</noinclude>تتكون جميع شيفرات PHP من سلسلة من العبارات (statements)، ويمكن للعبارة أن تكون إسنادًا (assignment) أو استدعاءً لدالّة، أو حلقة تكرارية، أو عبارة شرطية أو حتى عبارة لا تقوم بأي عمل على الإطلاق (عبارة فارغة). | <noinclude>{{DISPLAYTITLE:بنى التحكم في PHP}}</noinclude>تتكون جميع شيفرات PHP من سلسلة من العبارات (statements)، ويمكن للعبارة أن تكون إسنادًا (assignment) أو استدعاءً لدالّة، أو حلقة تكرارية، أو عبارة شرطية أو حتى عبارة لا تقوم بأي عمل على الإطلاق (عبارة فارغة). | ||
تنتهي العبارات عادة بالفاصلة المنقوطة (<code>;</code>)، ويمكن تجميع العبارات بإحاطتها بالأقواس المعقوفة (<code>{}</code>) لتصبح مجموعة عبارات statement- | تنتهي العبارات عادة بالفاصلة المنقوطة (<code>;</code>)، ويمكن تجميع العبارات بإحاطتها بالأقواس المعقوفة (<code>{}</code>) لتصبح مجموعة عبارات (statement-group)، والتي تعدّ بدورها عبارات أيضًا. | ||
سنفصل الحديث في هذا الفصل عن أنواع متعددة من العبارات. | سنفصل الحديث في هذا الفصل عن أنواع متعددة من العبارات. | ||
== <code>[[PHP | == <code>[[PHP/if|if]]</code> == | ||
بنية if هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة. | بنية <code>if</code> هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة. | ||
== <code>[[PHP | == <code>[[PHP/else|else]]</code> == | ||
قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور <code>else</code>، والتي تعمل على تمديد عبارة <code>[[PHP | قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور <code>else</code>، والتي تعمل على تمديد عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال أدّى حساب عبارة <code>[[PHP/if|if]]</code> إلى النتيجة <code>FALSE</code>. | ||
== <code>[[PHP | == <code>[[PHP/elseif|elseif/else if]]</code> == | ||
كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من <code>[[PHP | كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من <code>[[PHP/if|if]]</code> و <code>[[PHP/else|else]]</code>، وكما هو الحال مع <code>[[PHP/else|else]]</code> ، يمكن توسيع عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال كانت نتيجة تعبير <code>[[PHP/if|if]]</code> هي <code>FALSE</code>. ولكن، على العكس من <code>[[PHP/else|else]]</code>، فإن <code>elseif</code> تنفذ ذلك التعبير البديل في حالة واحدة فقط وهي أن تكون نتيجة التعبير الشرطي المتعلق بعبارة <code>elseif</code> هي <code>TRUE</code>. | ||
== [[PHP/ | == [[PHP/control structures alternative syntax|صيغة بديلة لبنى التحكم]] == | ||
تقدّم PHP صيغة مختلفة لبعض بنى التحكّم المتوفّرة فيها، وهي <code>[[PHP | تقدّم PHP صيغة مختلفة لبعض بنى التحكّم المتوفّرة فيها، وهي <code>[[PHP/if|if]]</code> و <code>[[PHP/while|while]]</code> و <code>[[PHP/for|for]]</code> و <code>[[PHP/foreach|foreach]]</code> و <code>[[PHP/switch|switch]]</code>. وفي جميع الأحوال يمكن استخدام الصيغة البديلة بوضع نقطتين رأسيتين (<code>:</code>) بدلًا من القوس المعقوف في بداية العبارة ووضع العبارة <code>endif;</code> أو <code>endwhile;</code> أو <code>endfor;</code> أو<code>endforeach;</code> أو <code>endswitch;</code> في النهاية حسب الحاجة. | ||
== <code>[[PHP | == <code>[[PHP/while|while]]</code> == | ||
تعد حلقات while التكرارية أبسط أنواع الحلقات في PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C. | تعد حلقات <code>while</code> التكرارية أبسط أنواع الحلقات في PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C. | ||
== <code>[[PHP | == <code>[[PHP/do-while|do-while]]</code> == | ||
حلقات <code>do-while</code> مشابهة جدًّا لحلقات <code>[[PHP | حلقات <code>do-while</code> مشابهة جدًّا لحلقات <code>[[PHP/while|while]]</code>، باستثناء أنّها عملية التحقق من الشرط تحدث في نهاية الدورة بدلًا من بدايتها. ما يميز هذه الحلقات عن حلقات while هو أنّ الدورة الأولى في حلقات <code>do-while</code> ستنفّذ في جميع الأحوال (تحدث عملية التحقق في نهاية الدورة فقط) في حين أن الدورة الأولى في حلقات <code>[[PHP/while|while]]</code> قد لا تنفّذ بالضرورة (تحدث عملية التحقق في بداية كل دورة، وإن كانت النتيجة <code>FALSE</code> منذ البداية تتوقف الحلقة عن العمل مباشرة). | ||
== <code>[[PHP | == <code>[[PHP/for|for]]</code> == | ||
تعدّ حلقات <code>for</code> النوع الأكثر تعقيدًا من الحلقات في PHP، وهي مشابهة لنظيرتها في لغة C. | تعدّ حلقات <code>for</code> النوع الأكثر تعقيدًا من الحلقات في PHP، وهي مشابهة لنظيرتها في لغة C. | ||
== <code>[[PHP | == <code>[[PHP/foreach|foreach]]</code> == | ||
تقدّم بنية foreach طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ. | تقدّم بنية <code>foreach</code> طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ. | ||
== <code>[[PHP | == <code>[[PHP/break|break]]</code> == | ||
تنهي <code>break</code> تنفيذ حلقات <code>[[PHP | تنهي <code>break</code> تنفيذ حلقات <code>[[PHP/for|for]]</code> أو <code>[[PHP/foreach|foreach]]</code> أو <code>[[PHP/while|while]]</code> أو <code>[[PHP/do-while|do-while]]</code> أو بنية <code>[[PHP/switch|switch]]</code>. | ||
== <code>[[PHP | == <code>[[PHP/continue|continue]]</code> == | ||
تستخدم continue في الحلقات التكرارية لتجاوز ما يأتي بعدها في الحلقة التكرارية والاستمرار في تنفيذ الشيفرة حسب الشرط المعتمد في الحلقة ثم الانتقال إلى بداية الدورة التالية. | تستخدم <code>continue</code> في الحلقات التكرارية لتجاوز ما يأتي بعدها في الحلقة التكرارية والاستمرار في تنفيذ الشيفرة حسب الشرط المعتمد في الحلقة ثم الانتقال إلى بداية الدورة التالية. | ||
== <code>[[PHP | == <code>[[PHP/switch|switch]]</code> == | ||
تشبه عبارة <code>switch</code> سلسلةً من عبارات if مطبّقة على نفس التعبير. قد تحتاج في بعض الأحيان إلى مقارنة نفس المتغير (أو التعبير) مع قيم مختلفة (حالات cases)، وتنفيذ شيفرة مختلفة بالاعتماد على ذلك، وهذه هي وظيفة عبارة <code>switch</code>. | تشبه عبارة <code>switch</code> سلسلةً من عبارات <code>if</code> مطبّقة على نفس التعبير. قد تحتاج في بعض الأحيان إلى مقارنة نفس المتغير (أو التعبير) مع قيم مختلفة (حالات cases)، وتنفيذ شيفرة مختلفة بالاعتماد على ذلك، وهذه هي وظيفة عبارة <code>switch</code>. | ||
== <code>[[PHP | == <code>[[PHP/declare|declare]]</code> == | ||
تستخدم بنية <code>declare</code> لتعيين موجّهات التنفيذ (execution directives) لكتلة من الشيفرة، وصيغة <code>declare</code> مشابهة لبنى التحكم في تدفق الشيفرة. | تستخدم بنية <code>declare</code> لتعيين موجّهات التنفيذ (execution directives) لكتلة من الشيفرة، وصيغة <code>declare</code> مشابهة لبنى التحكم في تدفق الشيفرة. | ||
== <code>[[PHP | == <code>[[PHP/return|return]]</code> == | ||
تعيد تنفيذ البرنامج إلى الوحدة التي قامت بالاستدعاء، وسيستمر التنفيذ إلى التعبير الذي يلي تعبير الاستدعاء. | تعيد تنفيذ البرنامج إلى الوحدة التي قامت بالاستدعاء، وسيستمر التنفيذ إلى التعبير الذي يلي تعبير الاستدعاء. | ||
== <code>[[PHP | == <code>[[PHP/require|require]]</code> == | ||
العبارة <code>require</code> مطابقة للعبارة <code>[[PHP | العبارة <code>require</code> مطابقة للعبارة <code>[[PHP/include|include]]</code> باستثناء أنّها تطلق خطأ من نوع <code>E_COMPLE_ERROR</code> في حال فشلها في جلب الملف. | ||
== <code>[[PHP | == <code>[[PHP/include|include]]</code> == | ||
تعمل عبارة include على تضمين ومعالجة الملف المحدّد. | تعمل عبارة include على تضمين ومعالجة الملف المحدّد. | ||
== <code>[[PHP | == <code>[[PHP/require once|require_once]]</code> == | ||
عبارة <code>require_once</code> مطابقة للعبارة <code>[[PHP | عبارة <code>require_once</code> مطابقة للعبارة <code>[[PHP/require|require]]</code> باستثناء أن PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى. | ||
== <code>[[PHP | == <code>[[PHP/include once|include_once]]</code> == | ||
تُضمِّن العبارة <code>include_once</code> الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة <code>[[PHP | تُضمِّن العبارة <code>include_once</code> الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة <code>[[PHP/include|include]]</code> والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع <code>include_once</code> القيمة <code>TRUE</code>، وهذا السلوك متوقع من اسم العبارة. | ||
== <code>[[PHP | == <code>[[PHP/goto|goto]]</code> == | ||
يمكن استخدام عامل <code>goto</code> للانتقال إلى قسم آخر في البرنامج. | يمكن استخدام عامل <code>goto</code> للانتقال إلى قسم آخر في البرنامج. | ||
المراجعة الحالية بتاريخ 18:23، 31 يوليو 2018
تتكون جميع شيفرات PHP من سلسلة من العبارات (statements)، ويمكن للعبارة أن تكون إسنادًا (assignment) أو استدعاءً لدالّة، أو حلقة تكرارية، أو عبارة شرطية أو حتى عبارة لا تقوم بأي عمل على الإطلاق (عبارة فارغة).
تنتهي العبارات عادة بالفاصلة المنقوطة (;
)، ويمكن تجميع العبارات بإحاطتها بالأقواس المعقوفة ({}
) لتصبح مجموعة عبارات (statement-group)، والتي تعدّ بدورها عبارات أيضًا.
سنفصل الحديث في هذا الفصل عن أنواع متعددة من العبارات.
if
بنية if
هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة.
else
قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور else
، والتي تعمل على تمديد عبارة if
لتنفيذ عبارة أخرى في حال أدّى حساب عبارة if
إلى النتيجة FALSE
.
elseif/else if
كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من if
و else
، وكما هو الحال مع else
، يمكن توسيع عبارة if
لتنفيذ عبارة أخرى في حال كانت نتيجة تعبير if
هي FALSE
. ولكن، على العكس من else
، فإن elseif
تنفذ ذلك التعبير البديل في حالة واحدة فقط وهي أن تكون نتيجة التعبير الشرطي المتعلق بعبارة elseif
هي TRUE
.
صيغة بديلة لبنى التحكم
تقدّم PHP صيغة مختلفة لبعض بنى التحكّم المتوفّرة فيها، وهي if
و while
و for
و foreach
و switch
. وفي جميع الأحوال يمكن استخدام الصيغة البديلة بوضع نقطتين رأسيتين (:
) بدلًا من القوس المعقوف في بداية العبارة ووضع العبارة endif;
أو endwhile;
أو endfor;
أوendforeach;
أو endswitch;
في النهاية حسب الحاجة.
while
تعد حلقات while
التكرارية أبسط أنواع الحلقات في PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C.
do-while
حلقات do-while
مشابهة جدًّا لحلقات while
، باستثناء أنّها عملية التحقق من الشرط تحدث في نهاية الدورة بدلًا من بدايتها. ما يميز هذه الحلقات عن حلقات while هو أنّ الدورة الأولى في حلقات do-while
ستنفّذ في جميع الأحوال (تحدث عملية التحقق في نهاية الدورة فقط) في حين أن الدورة الأولى في حلقات while
قد لا تنفّذ بالضرورة (تحدث عملية التحقق في بداية كل دورة، وإن كانت النتيجة FALSE
منذ البداية تتوقف الحلقة عن العمل مباشرة).
for
تعدّ حلقات for
النوع الأكثر تعقيدًا من الحلقات في PHP، وهي مشابهة لنظيرتها في لغة C.
foreach
تقدّم بنية foreach
طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ.
break
تنهي break
تنفيذ حلقات for
أو foreach
أو while
أو do-while
أو بنية switch
.
continue
تستخدم continue
في الحلقات التكرارية لتجاوز ما يأتي بعدها في الحلقة التكرارية والاستمرار في تنفيذ الشيفرة حسب الشرط المعتمد في الحلقة ثم الانتقال إلى بداية الدورة التالية.
switch
تشبه عبارة switch
سلسلةً من عبارات if
مطبّقة على نفس التعبير. قد تحتاج في بعض الأحيان إلى مقارنة نفس المتغير (أو التعبير) مع قيم مختلفة (حالات cases)، وتنفيذ شيفرة مختلفة بالاعتماد على ذلك، وهذه هي وظيفة عبارة switch
.
declare
تستخدم بنية declare
لتعيين موجّهات التنفيذ (execution directives) لكتلة من الشيفرة، وصيغة declare
مشابهة لبنى التحكم في تدفق الشيفرة.
return
تعيد تنفيذ البرنامج إلى الوحدة التي قامت بالاستدعاء، وسيستمر التنفيذ إلى التعبير الذي يلي تعبير الاستدعاء.
require
العبارة require
مطابقة للعبارة include
باستثناء أنّها تطلق خطأ من نوع E_COMPLE_ERROR
في حال فشلها في جلب الملف.
include
تعمل عبارة include على تضمين ومعالجة الملف المحدّد.
require_once
عبارة require_once
مطابقة للعبارة require
باستثناء أن PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى.
include_once
تُضمِّن العبارة include_once
الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة include
والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع include_once
القيمة TRUE
، وهذا السلوك متوقع من اسم العبارة.
goto
يمكن استخدام عامل goto
للانتقال إلى قسم آخر في البرنامج.