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