【问题标题】:CakePHP Recommended syntax for templates (views)CakePHP 推荐的模板语法(视图)
【发布时间】:2017-04-27 14:42:41
【问题描述】:

自从我使用 CakePHP 以来,我问自己关于 CTP 文件推荐语法的更深层次的意义,它基本上是一个 HTML 文件,所有 PHP 代码都用标签括起来。我发现这很难阅读,我应该认为 HTML 和 PHP 之间的上下文切换会增加一些性能损失。 将所有输出收集在一个字符串中并在最后回显它不是更快更清晰吗? 但肯定有一些更深层次的意义,只是我没有看到它.. 为了让自己更清楚,这里有一个例子:

CakePHP:

<?php if (!empty($file['User']['email'])): ?>
<div class="mailto"><?php echo $this->Html->link($file['User']); ?></div>
<?php endif; ?>
<?php if (!empty($file['Document']['comments'])): ?>
<div class="file-comment file-extra column grid_6">
<div class="content"><?php echo $file['Document']['comments']?></div>
</div>
<?php endif; ?>

我的做法:

<?php
$out = '';
if (!empty($file['User']['email'])) {
 $out .= '<div class="mailto">'.$this->Html->link($file['User']).'</div>';
}
if (!empty($file['Document']['comments'])) {
 $out .= '<div class="file-comment file-extra column grid_6">'
  .'<div class="content">'.$file['Document']['comments'].'</div>'
  .'</div>';
}
echo $out;
?>

所以我的问题是:与 CakePHP 相比,我的方法有哪些缺点?

【问题讨论】:

  • the context switches between HTML and PHP would add some performance penalty - 这不存在。如问题的格式所示,一个明显的缺点是这样做会丢失代码格式。然而问题是off topic, as it is opinion based
  • 这两个代码示例都难以阅读 - IMO。而且我个人认为您的方法更难读。这只是格式和缩进的问题,而不是语言或其语法。推荐阅读:amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/…
  • 承认,我没有费心添加换行和缩进。除了添加换行符/缩进之外,您将如何以不同的方式编写它?也许有一种完全不同的方式来做到这一点?欢迎提出建议。
  • 这都是基于意见的。但我更喜欢 CakePHP 方法,同时缩进 if 语句和 html。

标签: php cakephp


【解决方案1】:

首先要做的事:将整个模板编写为 PHP,然后回显它不是一个好主意。作为一般的经验法则,如果可以的话,我会避免从 PHP 中回显 HTML。原因有很多,但主要原因是您的 IDE 中缺少语法高亮。

无论如何,代码格式完全取决于个人喜好,但如果您正在编写这样的模板:

<?php if (!empty($file['User']['email'])): ?>
<div class="mailto"><?php echo $this->Html->link($file['User']); ?></div>
<?php endif; ?>
<?php if (!empty($file['Document']['comments'])): ?>
<div class="file-comment file-extra column grid_6">
<div class="content"><?php echo $file['Document']['comments']?></div>
</div>
<?php endif; ?>

...难怪你看不懂。


您可以尝试一些方法,以使您的代码更清晰、更易于阅读。同样,这些取决于您自己的个人喜好,您可以养成使用其中部分或全部的习惯。

  • 正确设置 HTML 格式,并为子元素添加缩进。

  • 在过于繁忙的代码行之间添加空格,尤其是在 PHP 行和 HTML 行之间。

  • 使用简短的回显标签语法(&lt;?= 而不是&lt;?php echo)。

  • 将更复杂的 PHP 值分配给变量,以便您的 HTML 更易于阅读。

  • 记得注释您的代码(HTML 或 PHP),特别是添加 HTML cmets,以便您可以轻松地一目了然地看到模板的各个组件。

示例

<?php
    $user = $file['User'];
    $comments = $file['Document']['comments'];
?>

<!-- User --> 

<?php if (!empty($user['email'])) : ?>

<div class="mailto"><?= $this->Html->link($user); ?></div>

<?php endif; ?>

<!-- File Comments -->

<?php if (!empty($comments)) : ?>

<div class="file-comment file-extra column grid_6">
    <div class="content"><?= $comments; ?></div>
</div>

<?php endif; ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2019-01-15
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多