0

我有时会像其他人一样下载示例代码以节省时间而不必重新发明轮子

我刚刚在一个非常复杂的代码函数之后遇到了这个问题,所以编写它的人似乎知道他们在做什么 PHP 明智:

<?php if (isset($menu)) { ?>
    <?php echo $menu; ?>
  <?php } ?>

你为什么不写:

<?php if (isset($menu)) { echo $menu; } ?>

好奇哪个更好,如果是,为什么?

4

7 回答 7

2

这纯粹是品味/风格的问题,它对功能甚至系统设计都没有影响。就像替代语法不会以任何方式影响任何东西,除了样式。这本来可以很好地写成:

<?php if (isset($menu)): echo $menu; endif ?>

这将是同样的事情。

但是请注意,对于纯逻辑文件,跳出 PHP 通常是个坏主意。下面的代码:

<?php if ($test == 1) { ?>
    <?php ++$test; ?>
<?php } ?>

类似于:

<?php

if ($test == 1) {
    echo "    ";
    ++$test;
}

<?php ++$test; ?>这引入了打印四个空格(或制表符,或用于缩进块的任何内容)的不需要且经常被忽视的副作用。同样的事情也适用于关闭?>- 通常最好将其留在纯逻辑文件中,因为编辑器倾向于在文件末尾添加一个空的换行符,如果它跟在?>, 之后将被echo编辑。

于 2012-12-18T12:19:40.350 回答
1

在您的第一个示例中,无需关闭然后重新打开 PHP 标签,可以按照您在示例 2 中提供的操作来完成。

<?php
    if(isset($menu)){
        echo $menu;
    }
?>

您需要关闭然后重新打开标签的唯一原因是如果您还想打印更多的 HTML:

<?php
    if(isset($menu)){ ?>
        <div id="menu">
            <?= $menu ?>
        </div>
    <? }
?>
于 2012-12-18T12:20:06.143 回答
0

对我来说,这完全取决于偏好和我想要实现的目标。

在 100% PHP 代码文件中,我可能会这样做:

if (isset($somevariable))
{
    // do some stuff here
}

甚至这个

if (isset($somevariable)) echo htmlentities(print_r($somevariable, true));

而在混合的 HTML / PHP 文件(例如视图)中,我可以这样做:

<table>
<?php foreach ($result_set as $row) : ?>
    <tr>
        <td><?php echo $row['column']; ?></td>
    </tr>
<?php endforeach; ?>
</table>

我觉得更容易区分

我没有意见哪个“更好”

于 2012-12-18T12:22:35.637 回答
0

这两个片段之间没有功能差异。

代码最初可能看起来像这样:

<?php if (isset($menu)) { ?>
<a href='home.php'>Home</a> | <a href='links.php'>Links</a>
<?php } ?>

并且只有第二行已被动态生成。

于 2012-12-18T12:23:37.413 回答
0

我能看到的唯一原因是这段代码中是否混合了 HTML,例如

<?php if (isset($menu)) { ?>
    Html stuff here
<?php echo $menu; ?>
    More html stuff here.
<?php } ?>

但是,我无法想象有任何实际用途。

我个人会做类似您的示例 2 的事情。没有理由脱离 PHP。

于 2012-12-18T12:23:49.740 回答
0

如果您启用了 PHP 短标签,您可以使用

<?=$menu ?>

这意味着与以下行完全相同:

<?php echo $menu;?>

对于您的 if 情况,这可能很有用,但可能不太清楚

<?=isset($menu)? $menu : "" ?>

如果您要合并这些行,请记住允许换行:

<?php
    if(isset($menu)){
        echo $menu;
    }
?>

如果您不喜欢乱码,您可能还想使用 Google PHP 模板库。

于 2012-12-18T12:24:11.270 回答
0

只是一个想法而不是一个问题,但我不能在评论中发布代码,所以这里是。

也许它只是一种遗留格式?即以前它是这样的:

<?php if (isset($menu)) { ?>
    <p>Here comes the menu!</p>
    <?php echo $menu; ?>
    <p>So how did you like it?</p>
<?php } ?>

然后其他人删除了 HTML 并保持 PHP 不变。

无论如何,我同意@Matt Clark(甚至在他编辑他的答案之前:))和@rid 以及其他人的观点,即代码应该易于阅读并根据行业标准进行格式化。

于 2012-12-18T12:26:27.153 回答