在PHP中输出可能包含或不包含任何内容的变量的最佳实践是什么?

时间:2008-11-25 10:57:44

标签: php error-suppression

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

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

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

3 个答案:

答案 0 :(得分:4)

您可以使用

<?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'); ?>

答案 1 :(得分:2)

我倾向于使用:

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

真的过度杀伤,但我想直截了当!$ new_item如果没有设置会抛出通知。您还可以将第二个子句切换为!empty($ new_item),具体取决于您想要的行为。

答案 2 :(得分:1)

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

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->somefield将被设置,你可以这样做:

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