2011-04-02 127 views
2

我只是想知道它是否正常嵌入在HTML中的PHP,或者它被认为是脏/不专业。例如考虑以下几行:在HTML中嵌入PHP代码?

<? if($photo == 0) { ?> 
    <div class ="reminder">Hey <?=$name;?>, You don't have any photo. </div> 
<? } else { ?> 
    <div class ="ok">Do you want to change your photo? </div> 
<? } ?> 

这样的代码是否正常?如何以干净/专业的方式完成类似的工作(没有PHP框架?) 谢谢。

+3

尝试使用<?php而不是<? – Sourav 2011-04-02 08:13:53

+0

不要尝试使用'<?php'而不是'<?',你当前的语法是好的 – 2011-04-02 09:31:43

回答

3

只要你把程序的逻辑保存在html之外,就没问题。例如,您需要将其混合到您的模板中。像smarty这样的模板引擎用<取代{$ myVar}? php echo $ myVar; ? >(简单地说),所以不可能完全避免它。但事情像

<?php 

include "db.php"; 
connect_db(); 

// check login 

echo "<html>< head><body>..."; 

?> 

是不是好的做法,因为你混都在一起:程序逻辑(登录检查,DB-东西)和输出(回声HTML)。只要看看MVC,并牢记“关注点分离”。

你的例子看起来不错,因为你只需要你的html中的逻辑来直接控制输出。但计算$照片的价值,取决于一个数据库条目,例如,不会在你的HTML,因为这是程序逻辑。输出(HTML)和逻辑应该一直分开。

0

我尽量保持这个最低限度,因为我发现它更难调试所有的 <?在代码中流动(WordPress的主题大师这样做很多)

1

这是非常正常的,不管它是好还是不好是一个完全独立的主题。这完全取决于您项目的规模和您对可维护性/灵活性的要求。

如果这是一个小项目,只需做你必须完成的任务。然而存在一个问题,在没有框架的情况下开发它变得很笨重。这是非常主观的,因项目而异,但这是一般原则。

0

对此会有很多意见。混合HTML和PHP可能会变得非常混乱,但这看起来很好。许多专业人士就是这样工作的。如果它适合你,那很好。

0

为了使其更具可读性,我倾向于将括号保留在单独的行中,以便您可以确保能够轻松找到它们,但那只是我。

+0

在模板中试一下,你会发现它只是浪费空间 – 2011-04-02 09:29:13

1

在模板中使用PHP是可以的,但许多人更喜欢使用模板语言,因为它强制分离并确保您不会用大量PHP填充模板。如果你确实下了模板路径TwigSmarty是相当不错的,因为它们将模板编译为PHP来加快速度。

如果您在您的模板中编写PHP,请尝试遵循一些最佳实践编码标准,以保持整洁。例如:

  • 使用完整的<?php标记兼容性。
  • 在编写任何循环而不是大括号时,请使用冒号。要结束语句,您需要明确地将其写为endforeach/endif/endwhile/etc。这使得PHP模板更具可读性。
  • 如果你有很多逻辑将它移入外部PHP文件,以保持模板中的PHP短而易读
  • 如果PHP标签中只有一条PHP语句,则不需要用一个分号。再次,有助于可读性

一个例子:

<?php if ($photo == 0): ?> 
    <div class ="reminder">Hey <?php echo $name ?>, You don't have any photo.</div> 
<?php else: ?> 
    <div class ="ok">Do you want to change your photo?</div> 
<?php endif ?> 

多见于:

1

的,你可以用智者templete .. ..它提高了哟乌尔编码风格和作品快...查看smarty和尝试,它的真正真棒

+0

你能否提供smarty代码示例事情? – 2011-04-02 09:32:29

0

有从家伙的答案叫alexn
说不上来为什么他删除它,它看起来最好的回答我,所以,我只有重现它:

我会说这是要走的路。您 有一个很好的,清晰的PHP 和HTML的分离。

这里的另一种选择:

<? if($photo == 0): ?> 
    <div class ="reminder">Hey <?=$name?>, You don't have any photo. </div> 
<? else: ?> 
    <div class ="ok">Do you want to change your photo? </div> 
<? endif ?> 
1

从我已阅读无论是工作,但大多数人只是使用echo语句小,有条件的HTML。