الفرق بين المراجعتين لصفحة: «PHP/Control Structures»

من موسوعة حسوب
< PHP
إعادة هيكلة الصفحة
لا ملخص تعديل
 
(16 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:بنى التحكم في PHP}}</noinclude>تتكون جميع شيفرات PHP من سلسلة من العبارات (statements)، ويمكن للعبارة أن تكون إسنادًا (assignment) أو استدعاءً لدالّة، أو حلقة تكرارية، أو عبارة شرطية أو حتى عبارة لا تقوم بأي عمل على الإطلاق (عبارة فارغة).
<noinclude>{{DISPLAYTITLE:بنى التحكم في PHP}}</noinclude>تتكون جميع شيفرات PHP من سلسلة من العبارات (statements)، ويمكن للعبارة أن تكون إسنادًا (assignment) أو استدعاءً لدالّة، أو حلقة تكرارية، أو عبارة شرطية أو حتى عبارة لا تقوم بأي عمل على الإطلاق (عبارة فارغة).


تنتهي العبارات عادة بالفاصلة المنقوطة (<code>;</code>)، ويمكن تجميع العبارات بإحاطتها بالأقواس المعقوفة (<code>{}</code>) لتصبح مجموعة عبارات statement-group، والتي تعدّ بدورها عبارات أيضًا.  
تنتهي العبارات عادة بالفاصلة المنقوطة (<code>;</code>)، ويمكن تجميع العبارات بإحاطتها بالأقواس المعقوفة (<code>{}</code>) لتصبح مجموعة عبارات (statement-group)، والتي تعدّ بدورها عبارات أيضًا.  


سنفصل الحديث في هذا الفصل عن أنواع متعددة من العبارات.
سنفصل الحديث في هذا الفصل عن أنواع متعددة من العبارات.


== <code>[[PHP/Control Structures/if|if]]</code> ==
== <code>[[PHP/if|if]]</code> ==
بنية if هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة.
بنية <code>if</code> هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة.


== <code>[[PHP/Control Structures/else|else]]</code> ==
== <code>[[PHP/else|else]]</code> ==
قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور <code>else</code>، والتي تعمل على تمديد عبارة <code>[[PHP/Control Structures/if|if]]</code> لتنفيذ عبارة أخرى في حال أدّى حساب عبارة <code>[[PHP/Control Structures/if|if]]</code> إلى النتيجة <code>FALSE</code>.
قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور <code>else</code>، والتي تعمل على تمديد عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال أدّى حساب عبارة <code>[[PHP/if|if]]</code> إلى النتيجة <code>FALSE</code>.


== <code>[[PHP/Control Structures/elseif|elseif/else if]]</code> ==
== <code>[[PHP/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>. 
كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من <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/Control Structures/alternative-syntax|صيغة بديلة لبنى التحكم]] ==
== [[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>‎ في النهاية حسب الحاجة.
تقدّم 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/Control Structures/while|while]]</code> ==
== <code>[[PHP/while|while]]</code> ==
تعد حلقات while التكرارية أبسط أنواع الحلقات في PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C.
تعد حلقات <code>while</code> التكرارية أبسط أنواع الحلقات في PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C.


== <code>[[PHP/Control Structures/do-while|do-while]]</code> ==
== <code>[[PHP/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>do-while</code> مشابهة جدًّا لحلقات <code>[[PHP/while|while]]</code>، باستثناء أنّها عملية التحقق من الشرط تحدث في نهاية الدورة بدلًا من بدايتها. ما يميز هذه الحلقات عن حلقات while هو أنّ الدورة الأولى في حلقات <code>do-while</code> ستنفّذ في جميع الأحوال (تحدث عملية التحقق في نهاية الدورة فقط) في حين أن الدورة الأولى في حلقات <code>[[PHP/while|while]]</code> قد لا تنفّذ بالضرورة (تحدث عملية التحقق في بداية كل دورة، وإن كانت النتيجة <code>FALSE</code> منذ البداية تتوقف الحلقة عن العمل مباشرة).


== <code>[[PHP/Control Structures/for|for]]</code> ==
== <code>[[PHP/for|for]]</code> ==
تعدّ حلقات <code>for</code> النوع الأكثر تعقيدًا من الحلقات في PHP، وهي مشابهة لنظيرتها في لغة C.
تعدّ حلقات <code>for</code> النوع الأكثر تعقيدًا من الحلقات في PHP، وهي مشابهة لنظيرتها في لغة C.


== <code>[[PHP/Control Structures/foreach|foreach]]</code> ==
== <code>[[PHP/foreach|foreach]]</code> ==
تقدّم بنية foreach طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ.
تقدّم بنية <code>foreach</code> طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ.


== <code>[[PHP/Control Structures/break|break]]</code> ==
== <code>[[PHP/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>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/Control Structures/continue|continue]]</code> ==
== <code>[[PHP/continue|continue]]</code> ==
تستخدم continue في الحلقات التكرارية لتجاوز ما يأتي بعدها في الحلقة التكرارية والاستمرار في تنفيذ الشيفرة حسب الشرط المعتمد في الحلقة ثم الانتقال إلى بداية الدورة التالية.
تستخدم <code>continue</code> في الحلقات التكرارية لتجاوز ما يأتي بعدها في الحلقة التكرارية والاستمرار في تنفيذ الشيفرة حسب الشرط المعتمد في الحلقة ثم الانتقال إلى بداية الدورة التالية.


== <code>[[PHP/Control Structures/switch|switch]]</code> ==
== <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/Control Structures/declare|declare]]</code> ==
== <code>[[PHP/declare|declare]]</code> ==
تستخدم بنية <code>declare</code> لتعيين موجّهات التنفيذ (execution directives) لكتلة من الشيفرة، وصيغة <code>declare</code> مشابهة لبنى التحكم في تدفق الشيفرة.
تستخدم بنية <code>declare</code> لتعيين موجّهات التنفيذ (execution directives) لكتلة من الشيفرة، وصيغة <code>declare</code> مشابهة لبنى التحكم في تدفق الشيفرة.


== <code>[[PHP/Control Structures/return|return]]</code> ==
== <code>[[PHP/return|return]]</code> ==
تعيد تنفيذ البرنامج إلى الوحدة التي قامت بالاستدعاء، وسيستمر التنفيذ إلى التعبير الذي يلي تعبير الاستدعاء.
تعيد تنفيذ البرنامج إلى الوحدة التي قامت بالاستدعاء، وسيستمر التنفيذ إلى التعبير الذي يلي تعبير الاستدعاء.


== <code>[[PHP/Control Structures/require|require]]</code> ==
== <code>[[PHP/require|require]]</code> ==
العبارة <code>require</code> مطابقة للعبارة <code>[[PHP/Control Structures/include|include]]</code> باستثناء أنّها تطلق خطأ من نوع <code>E_COMPLE_ERROR</code> في حال فشلها في جلب الملف.
العبارة <code>require</code> مطابقة للعبارة <code>[[PHP/include|include]]</code> باستثناء أنّها تطلق خطأ من نوع <code>E_COMPLE_ERROR</code> في حال فشلها في جلب الملف.


== <code>[[PHP/Control Structures/include|include]]</code> ==
== <code>[[PHP/include|include]]</code> ==
تعمل عبارة include على تضمين ومعالجة الملف المحدّد.
تعمل عبارة include على تضمين ومعالجة الملف المحدّد.


== <code>[[PHP/Control Structures/require-once|require_once]]</code> ==
== <code>[[PHP/require once|require_once]]</code> ==
عبارة <code>require_once</code> مطابقة للعبارة <code>[[PHP/Control Structures/require|require]]</code> باستثناء أن PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى.
عبارة <code>require_once</code> مطابقة للعبارة <code>[[PHP/require|require]]</code> باستثناء أن PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى.


== <code>[[PHP/Control Structures/include-once|include_once]]</code> ==
== <code>[[PHP/include once|include_once]]</code> ==
تُضمِّن العبارة <code>include_once</code> الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة <code>[[PHP/Control Structures/include|include]]</code> والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع <code>include_once</code> القيمة <code>TRUE</code>، وهذا السلوك متوقع من اسم العبارة.
تُضمِّن العبارة <code>include_once</code> الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة <code>[[PHP/include|include]]</code> والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع <code>include_once</code> القيمة <code>TRUE</code>، وهذا السلوك متوقع من اسم العبارة.


== <code>[[PHP/Control Structures/goto|goto]]</code> ==
== <code>[[PHP/goto|goto]]</code> ==
يمكن استخدام عامل <code>goto</code> للانتقال إلى قسم آخر في البرنامج.
يمكن استخدام عامل <code>goto</code> للانتقال إلى قسم آخر في البرنامج.


سطر 62: سطر 62:
* [http://php.net/manual/en/language.control-structures.php صفحة Control Structures في توثيق PHP الرسمي.]
* [http://php.net/manual/en/language.control-structures.php صفحة Control Structures في توثيق PHP الرسمي.]
* [http://php.net/manual/en/control-structures.intro.php صفحة Control Structures Introduction في توثيق PHP الرسمي.]
* [http://php.net/manual/en/control-structures.intro.php صفحة Control Structures Introduction في توثيق PHP الرسمي.]
[[تصنيف:PHP]]
[[تصنيف:PHP|{{SUBPAGENAME}}]]
[[تصنيف:PHP Control Structures]]
[[تصنيف:PHP Control Structures|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 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 للانتقال إلى قسم آخر في البرنامج.

مصادر