我和一个基于kirby cms的php项目的网络程序员合作,他希望打开并关闭每一行:
<main>
<?php /*php code here/* ?>
<?php /*more php here*/ ?>
...
尝试遵循这种风格,我在代码中发现了一些错误。首先,我似乎无法在数组中间执行此操作:
BAD CODE
<?php $oo = array( ?>
<?php 'h' => 100, ?>
<?php 'v' => 100, ?>
<?php ); ?>
但我可以在foreach循环中间这样做:
<?php foreach ($p as $subp): ?>
<div id='<?= $subp->title() ?>'>
<?php endforeach; ?>
是否有其他情况,例如数组,我不能这样做?
/编辑
根据答案,'foreach','while'或'if'块内只能有标记中断。
函数中的'foreach','while'或'if'怎么样?是'合法'?:
<?php
function myFunction($arg){
if($arg === 'this'): ?>
<?= '<p>yep</p>' ?>
<?php else: ?>
<?= '<p>nop</p>' ?>
<?php endif;
};
?>
如果在函数内的foreach中嵌套怎么样?:
<?php
function myFunction($arr){
foreach($arr as $val): ?>
<p><?= $val ?> <p>
<?php if($val === 'this'): ?>
<?= '<p>yep</p>' ?>
<?php else: ?>
<?= '<p>nop</p>' ?>
<?php endif;
endforeach;
};
?>
编辑/
谢谢
答案 0 :(得分:3)
你不能&#34;突破php&#34;中期声明。 wline定义一个数组,例如你不能关闭php标签。唯一可以&#34;爆发的时间&#34; php是在打开和关闭循环或if / else语句之间。由于<?php foreach: ?>
是一个完整的陈述而<?php foreach{ ?>
不是完整的陈述,因此这实际上不会破坏陈述。这里有一些你可以做的例子:
<?php if($this!=$that): ?>
{something}
<?php endif ?>
<?php foreach($things as $thing): ?>
{something}
<?php endforeach ?>
<?php $while($this): ?>
{something}
<?php endwhile ?>
我想你得到的消息。你必须在php标签中有完整的声明,没有中断。
P.S。同时避免不惜一切代价使用速记<?
而不是<?php
,将项目移动到其他主机或升级您的主机可能会破坏您的项目,因为默认短标签未激活。 <?= ?>
简写是安全的,因为它不受新版php设置的影响。
P.P.S不要在一行中听那个想要php的人,这会让你的代码难以阅读和维护。站得住,写出漂亮的代码:)
更新:(在@Jaume Mal提问后更新)
我并不是说我的答案中的例子是独占的,而是作为完整的语句和不完整的语句的例子。 (我也忘了提到关闭php标签中间功能,但也工作但我鄙视和woudl强烈建议反对。)所以例如<?php function foo(){
是启动函数的完整声明但是(如其他情况下循环等) ..)它需要一个结束语句,在这种情况下}
。这对于if / else或foreach等都是如此:
<?php if($this){ ?>
some code
<?php } ?>
是一个有效的代码,因为php标记中的代码片段是完整的语句。