سؤال

لقد كنت أعمل على PHP لبعض الوقت ولكن اليوم عندما رأيت هذا ، أصبح الأمر جديدًا بالنسبة لي:

if(preg_match('/foo.*bar/','foo is a bar')):
        echo 'success ';
        echo 'foo comes before bar';

endif;

لدهشتي أنها تعمل أيضًا دون خطأ. هل يمكن لأي شخص أن ينيرني؟

شكرا للجميع :)

هل كانت مفيدة؟

المحلول

يستخدم هذا النمط من بناء الجملة أكثر شيوعًا عند التضمين في HTML ، خاصة بالنسبة لمنطق القالب/العرض. عند تضمينها بهذه الطريقة ، من الأسهل بقليل أن تقرأ من بناء جملة Curly Braces.

<div>
<? if ($condition): ?>
  <ul>
    <? foreach($foo as $bar): ?>
        <li><?= $bar ?></li>
    <? endforeach ?>
  </ul>
<? endif ?>
</div>

عكس:

<div>
<? if ($condition) { ?>
  <ul>
    <? foreach($foo as $bar) { ?>
      <li><?= $bar ?></li>
    <? } ?>
  </ul>
<? } ?>

تجعل علامات النهاية المطوّلة من الأسهل تتبع كتل التعليمات البرمجية المتداخلة ، على الرغم من أنها لا تزال في الغالب تفضيلًا شخصيًا.

نصائح أخرى

هذا هو PHP's بناء جملة بديل لهياكل التحكم.

مقتطفك يعادل:

if(preg_match('/foo.*bar/','foo is a bar')) {
        echo 'success ';
        echo 'foo comes before bar';
}

على العموم:

if(cond):
...
...
endif;

هو نفسه

if(cond) {
...
...
}

http://php.net/manual/en/control-structures.alternative-syntax.php

يعمل ل if, for, while, foreach, ، و switch. يمكن أن تكون مفيدة جدا لخلط PHP و HTML.

يمكنك أن تقرأ عنها في بناء جملة بديل لهياكل التحكم في دليل PHP. تم إعادة تنسيق ، فإن الكود الذي نشرته يبدو مثل هذا:

if (preg_match('/foo.*bar/','foo is a bar')):
    echo 'success ';
    echo 'foo comes before bar';
endif;

هذا الرمز يعادل:

if (preg_match('/foo.*bar/','foo is a bar')) {
    echo 'success ';
    echo 'foo comes before bar';
}

هذا بناء الجملة متاح للعديد من هياكل التحكم الأخرى أيضًا.

if ( condition ):
  // your if code
elseif ( other_condition ):
  // optional elseif code
else:
  // optional else code
endif;

while ( condition ):
  // your while code
endwhile;

for ( condition ):
  // your for code
endfor;

foreach ( condition ):
  // your foreach code
endforeach;

switch ( condition ):
  // your switch code
endswitch;

إنه ما يعادل:

if(preg_match('/foo.*bar/','foo is a bar')):
 echo 'success ';
 echo 'foo comes before bar';
endif;

وهو ما يعادل:

if(preg_match('/foo.*bar/','foo is a bar')){
    echo 'success ';
    echo 'foo comes before bar';
}

من الواضح أن حكمة دعم بناء الجملة الشرطية غير القياسي أمر مشكوك فيه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top