2011-01-13 52 views
10

根据是否输出HTML,我看到的一些PHP代码中充斥着“<?php”和“?>”标签。这是否有任何性能优势,而不是使用echo来编写HTML?当代码通过<?php标签不断在代码和HTML之间切换时,它使得代码非常难以阅读。大量使用PHP的“<?php”标签

请注意,我不只是在谈论偶尔的切换。我目前正在查看的代码(螳螂bt源代码)让我头痛,因为它正在切换的次数。非常非常难以阅读。我想知道他们是否有这样做的理由?

+4

除非你是Facebook,否则不是性能问题。 – 2011-01-13 16:06:51

+2

当页面大部分是HTML时,一致意见(无论如何都是微薄的)似乎是大量使用回声是不好的形式。另一方面,如果页面没有将控制逻辑和业务逻辑与显示分离,那也被认为是不好的形式。我曾经听说过,'echo'的开销与切入和切出''块的开销相差无几,但找不到您的参考。 – RobertB 2011-01-13 16:14:11

+0

无论天气如何,你应该仍然倾听并学习Facebook使用的方法,以及许多其他大型网站。 – RobertPitt 2011-01-13 16:18:43

回答

17

至于可读性去,我宁愿看到:

<ul> 
     <?php foreach ($items as $item): ?> 
      <li> 
       <a href="<?php esc($item->url)?>"> 
       <img src="<?php esc($item->icon)?>"/> 
       <?php esc($item->text)?> 
      </li> 
     <?php endforeach; ?> 
    </ul> 

比:

echo "<ul>"; 
    foreach ($items as $item) 
    { 
    echo "<li>"; 
    echo '<a href="'.esc($item->url).'">'; 
    echo '<img src="'.esc($item->icon).'"/>'; 
    echo esc($item->text); 
    echo '</li>'; 
    } 
    echo "</ul>"; 

不仅如此,但后者可以让你选择的IDE处理HTML语法和格式(告诉你,例如,</a>丢失)。所以,除非在短小的HTML之间进行更多的操作,否则<?php可能更可取。

编辑:至于性能,任何认真的代码速度的人都会激活一个缓存预编译器,将两个版本归结为完全相同的东西。

0

尽管就代码运行时间而言,这不会产生任何明显的影响,但认为这是“性能”应该计算的唯一位置的想法是荒谬的。开发人员花钱。所以清理这一切是一个性能提升!你自己的表现!

这样做。

0

PHP提供了一些非HTML提供的功能,例如循环。因此,如果您必须在代码中多次使用循环,则必须在php标记和HTML之间切换。此外,PHP可以帮助您实现HTML不允许的会话控制。因此,重要的是要在HTML

嵌入 PHP简而言之,使用我们不得不使用PHP或其他语言的附加功能

2

原因,它可能是这样的是这样的情况:

<?php if($logged_in) { ?> 
    <span class="x">Welcome, <?= $_SESSION['user'] ?></span> 
    <a href="logout.php">Logout</a> 
<?php } ?> 

相反的:

<?php 
    if($logged_in) { 
     echo "<span class=\"x\">Welcome, " . $_SESSION['user'] . "</span>"; 
     echo "<a href=\"logout.php\">Lougout</a>"; 
    } 
?> 

有少转义字符的担心。

3

除了初学者脚本之外没有任何理由,只是试图在没有任何架构思维或计划进入系统的长期运行的情况下将结果导入页面。

你应该做的是将你的设计从逻辑php代码中分离出来,设计编译应该在脚本运行时结束时完成。

如果您重新设计应用程序我肯定会建议您从一个框架开始,因为框架会强迫它的设计带来坏习惯。

从codeigniter开始,创建一个简单的博客,了解如何连接/插入/选择/更新数据库,了解如何处理会话,了解控制器以及创建控制器的原则。

当你有一个体面的游戏后,开始从远处看代码或设计的不良编码应用程序,但它究竟做了什么,它是从数据库中获取结果吗?有一个用户系统等等等等。

然后开始实施应用程序的基础层,如上所述,一旦您设计了数据库,您就可以开始构建模型以在应用程序中从数据库中获取数据,开始创建基本视图文件,其中包含样本,并将其重新编码到新应用程序中,同时牢记编码的结构和清洁程度。

希望这可以帮助你开始迁移,因为我当然不建议你继续使用这样的应用程序。


@米奇

事件想你的代码,第二部分是清洁其仍与应用程序的其余部分,它应该像这样结合你的观点:

<html> 
    <?php $this->load("segments/head"); ?> 
    <body> 
     <?php echo $this->wrap("span",$this->link("Some Linke",$this->var("homepage"))) ?> 
    </body> 
</html> 

一组专用的视图防止它与主逻辑交互的方法,这将被包装在一个对象中以防止范围,只有对象应该能够访问主逻辑。

0

我没有统计数据来支持这一点,但我的理解是,“关闭”PHP输出HTML而不是使用echo“”效率更高。原因在于,当你通过echo标签运行你的html时,你将PHP解析出来显示出来,而把它放入doc本身就可以让浏览器显示它而不必让PHP解析它。

当我做了ColdFusion的开发,我记得听说过标签的情况。

0

我更喜欢使用<?php?>,因为它更容易阅读HTML,但如果性能损失很小,则会更容易 。我已经用echo编写了HTML ,但在HTML中阅读和发现问题非常糟糕。