الفرق بين المراجعتين ل"PHP/goto"

من موسوعة حسوب
< PHP
اذهب إلى التنقل اذهب إلى البحث
ط (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
ط (استبدال النص - 'PHP/Control Structures/break' ب'PHP/break')
سطر 2: سطر 2:
 
(PHP 5 >= 5.3.0, PHP 7)
 
(PHP 5 >= 5.3.0, PHP 7)
  
يمكن استخدام عامل <code>goto</code> للانتقال إلى قسم آخر في البرنامج، وتعيّن نقطة الانتقال هذه بواسطة وسم متبوعٍ بنقطتين رأسيتين (:)، وتكون طريقة الانتقال باستخدام العامل <code>goto</code> متبوعًا بالوسم المراد الانتقال إليه. هناك بعض القيود المفروضة على استخدام <code>goto</code>، إذ يجب أن يكون الوسم الهدف في نفس الملف ونفس السياق (context)، بمعنى أنّه لا يمكن الانتقال من داخل الدالة أو التابع إلى الخارج كما لا يمكن الانتقال إلى الداخل. لا يمكن أيضًا الانتقال إلى أي نوع من أنواع الحلقات أو إلى بنية switch، ولكن يمكن الانتقال إلى نقاط خارجها، ومن الاستخدامات الشائعة هو استخدام <code>goto</code> بدلًا من عبارة <code>[[PHP/Control Structures/break|break]]</code> متعددة المستويات.
+
يمكن استخدام عامل <code>goto</code> للانتقال إلى قسم آخر في البرنامج، وتعيّن نقطة الانتقال هذه بواسطة وسم متبوعٍ بنقطتين رأسيتين (:)، وتكون طريقة الانتقال باستخدام العامل <code>goto</code> متبوعًا بالوسم المراد الانتقال إليه. هناك بعض القيود المفروضة على استخدام <code>goto</code>، إذ يجب أن يكون الوسم الهدف في نفس الملف ونفس السياق (context)، بمعنى أنّه لا يمكن الانتقال من داخل الدالة أو التابع إلى الخارج كما لا يمكن الانتقال إلى الداخل. لا يمكن أيضًا الانتقال إلى أي نوع من أنواع الحلقات أو إلى بنية switch، ولكن يمكن الانتقال إلى نقاط خارجها، ومن الاستخدامات الشائعة هو استخدام <code>goto</code> بدلًا من عبارة <code>[[PHP/break|break]]</code> متعددة المستويات.
  
 
المثال 1: مثال على <code>goto</code>
 
المثال 1: مثال على <code>goto</code>

مراجعة 03:29، 4 أبريل 2018

(PHP 5 >= 5.3.0, PHP 7)

يمكن استخدام عامل goto للانتقال إلى قسم آخر في البرنامج، وتعيّن نقطة الانتقال هذه بواسطة وسم متبوعٍ بنقطتين رأسيتين (:)، وتكون طريقة الانتقال باستخدام العامل goto متبوعًا بالوسم المراد الانتقال إليه. هناك بعض القيود المفروضة على استخدام goto، إذ يجب أن يكون الوسم الهدف في نفس الملف ونفس السياق (context)، بمعنى أنّه لا يمكن الانتقال من داخل الدالة أو التابع إلى الخارج كما لا يمكن الانتقال إلى الداخل. لا يمكن أيضًا الانتقال إلى أي نوع من أنواع الحلقات أو إلى بنية switch، ولكن يمكن الانتقال إلى نقاط خارجها، ومن الاستخدامات الشائعة هو استخدام goto بدلًا من عبارة break متعددة المستويات.

المثال 1: مثال على goto

<?php
goto a;
echo 'Foo';
 
a:
echo 'Bar';
?>

تعطي الشيفرة السابقة المخرجات التالية:

Bar

المثال 2: مثال على استخدام goto في حلقة تكرارية

<?php
for($i=0,$j=50; $i<100; $i++) {
  while($j--) {
    if($j==17) goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
?>

تعطي الشيفرة السابقة المخرجات التالية:

j hit 17

المثال 3: هذه الشيفرة لن تعمل

<?php
goto loop;
for($i=0,$j=50; $i<100; $i++) {
  while($j--) {
    loop:
  }
}
echo "$i = $i";
?>

تعطي الشيفرة السابقة المخرجات التالية:

Fatal error: 'goto' into loop or switch statement is disallowed in
script on line 2

ملاحظة: أصبح العامل goto متوافرًا في الإصدار 5.3 من PHP.

مصادر