【问题标题】:PHP if statement inside HTML attributeHTML属性内的PHP if语句
【发布时间】:2026-01-24 12:40:01
【问题描述】:

我想知道一些事情。我正在查看其他学员的代码(他们离开了,所以我什么都不能问)。我看到以下内容:

<input type="text" 
name="name" 
class="form-control" 
placeholder="name" 
value="<?php if (isset($something)): echo 'bla'; 
             else: if(!empty($somethingelse)): echo 'bla2'; endif;"
>

如果我自己这么说,这确实看起来很丑。我想知道:这实际上是一种“好”/好的方式,还是真的像我想的那么糟糕?

【问题讨论】:

  • 您没有关闭两个if 条件,缺少endif;。并且您还需要退出 PHP ?&gt;,这会产生语法错误。
  • 除了下面的答案之外,还请看一下 php 提供的“短标签”功能:&lt;?= 而不是 &lt;?php echo... 这样标记变得更具可读性。
  • @Qirel 哎呀,忘了添加它,虽然重要的是概念。

标签: php html if-statement


【解决方案1】:

我总是喜欢将 php 和 html 部分分开。这是我的建议:

<?php
    $value = isset($something)
        ? 'bla'
        : 'bla2'
    ;
?>

<input type="text" 
    name="name" 
    class="form-control" 
    placeholder="name" 
    value="<?php echo $value; ?>">

如果您开始使用 twig,您可以越来越多地改进它。如您所见,这里没有代码:它只是一个视图。

<input type="text" 
    name="field_name" 
    class="form-control" 
    placeholder="field name" 
    value="{{ field_name }}">

在某些时候,您可以将变量发送到该视图并保持分离的模型(数据和变量)形成视图:

$value = isset($something)
    ? 'bla'
    : 'bla2'
;

$this->render('path/to/template.html.twig', [
    'field_name' => $value,
]);

【讨论】:

  • 和我想的一样;我花了 2 天的时间来清理代码,并想尽可能多地清理它。你做的我也想过,就是好奇我展示的代码到底有多烂。
  • 每次为自己编写代码时,自己都清楚。在某些时候,为其他人编写代码非常重要。这是我知道强迫自己编写干净代码的唯一方法。
  • 检查我的编辑。在 PHP 世界中,有一些库和框架可以帮助您清理代码。我建议你学习所有关于 MVC 模式的知识。
  • 显然我希望你喜欢我的建议,接受我的正确回应^_^
  • 是的,我知道 MVC。我们使用了(感谢编写此代码的同一个人)我已经有点不喜欢的 Codeigniter。没有人花时间在其中实施 Twig(该项目中真正优秀的开发人员之一现在正在实施它,但直到周五才缺席并且没有提交他的东西)。但是,是的,你提出的建议是好的。很高兴看到你想出 Twig。
【解决方案2】:

试试这个

  <input type="text" 
    name="name" 
    class="form-control" 
    placeholder="name" 
    value="<?php echo isset($something) ? 'bla' : (!empty($somethingelse) ? 'bla2' : ''); ?>" >

【讨论】:

  • 代码转储不能提供好的答案。你应该解释如何为什么这可以解决他们的问题。我推荐阅读,“How do I write a good answer?"
  • 另外,我没有要求更换;我只是想知道我展示的代码有多糟糕。即使你的例子仍然困扰着我,我喜欢使用变量。
【解决方案3】:

试试这个 -

<?php 
    if (isset($something)){
        $value = 'bla'; 
    }
    else if(!empty($somethingelse)){
       $value = 'bla2';
    }
?>

<input type="text" name="name" class="form-control" placeholder="name" 
value="<?php echo $value ?>" >

首先我根据条件在$value 中设置值,然后在value 属性中回显该值。

【讨论】: