بناء جملة PHP غريب
-
04-10-2019 - |
سؤال
لقد كنت أعمل على 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';
}
من الواضح أن حكمة دعم بناء الجملة الشرطية غير القياسي أمر مشكوك فيه.