【问题标题】:What is the best practice for outputting a variable which may or may not contain anything in PHP?输出在 PHP 中可能包含或不包含任何内容的变量的最佳实践是什么?
【发布时间】:2010-09-23 22:30:47
【问题描述】:

我正在开发一个应用程序,并希望显示一个在编辑表单时将被填写的表单,但如果表单是一个新条目则不会。我相信这样做最不冗长的方法是只使用一个表单并抑制任何错误以回显我的变量,这样如果它是一个新表单就不会打印任何内容(因为如果它是一个新表单,变量将不存在) .例如:

<?php 
if ( ! $new_item) {
    $variable = 'Example';
}
?>
<form>
    <input type="text" name="inputbox" value="<?php echo @$variable; ?>" />
</form>

这是一个好的做法,还是有更好的方法?我应该为新项目和要编辑的项目创建单独的视图吗?这样做会对性能产生什么影响?

【问题讨论】:

    标签: php error-suppression


    【解决方案1】:

    你可以使用

    <?php echo ((isset($value) && $value != '') ? $value : 'Default'); ?>
    

    解决此问题的更简洁的方法是创建一个帮助函数来为您执行此操作:

    function useDefault($value, $default = '')
    {
        if (isset($value) && $value != '')
        {
            return $value;
        }
        else
        {
            return $default;
        }
    }
    

    然后你可以使用

    <?php echo useDefault($value, 'default value'); ?>
    

    【讨论】:

    • 需要通过引用获取$value,所以需要函数useDefault(&$value, $default = '')
    【解决方案2】:

    我认为最好的方法是始终设置变量

    if ( ! $new_item) {
        $variable = 'Example';
    } else {
        $variable = 'Default value'; 
        //or
        $variable = '';
    }
    

    使用@ 错误抑制很慢。

    编辑 请注意,当您将变量打印到输入值属性中时,您应该先调用htmlentities()htmlspecialchars()

    第二次编辑

    您在评论中说您正在获取对象上的数据,在这种情况下您也可以这样做:

    class example {
        public $somefield = 'default value';
    }
    

    然后,如果它是您正在编辑的现有记录,请执行以下操作,这将导致返回的对象成为“示例”的实例:

    $record = mysql_fetch_object($result, 'example');
    

    或者如果是新记录,请自行实例化:

    $record = new example(); 
    

    那么你总是知道$record-&gt;somefield 将被设置并且你可以这样做:

    <form>
        <input type="text" name="somefield" value="<?php echo htmlspecialchars($record->somefield); ?>" />
    </form>
    

    【讨论】:

    • 好的,很明显用这个例子来做这件事很简单,但我的实际情况要复杂一些——我从数据库中获取一个对象,所以我必须设置每个成员对象。
    • 那你为什么不用默认值定义对象呢?如果有的话,然后用数据库中的数据覆盖它们?
    • 我正在使用 CodeIgniter,我不知道他们是否有办法将结果提取到我自己的自定义对象中。不过,我想我可以手动完成。
    • 如果您使用的是 codeigniter,那么我希望有工具/教程可以帮助您完成类似这样的简单 CRUD 操作
    【解决方案3】:

    我倾向于使用:

    $variable = (isset($new_item) && $new_item) ? 'Example' : 'Default Value';
    

    确实矫枉过正,但我​​认为如果没有设置,直接使用 !$new_item 会引发通知。您还可以根据您想要的行为将第二个子句切换为 !empty($new_item)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 2013-07-05
      • 2021-03-22
      • 2015-08-03
      • 2019-12-30
      • 1970-01-01
      相关资源
      最近更新 更多