Какова наилучшая практика для вывода переменной, которая может содержать или не содержать ничего в PHP? - PullRequest
0 голосов
/ 25 ноября 2008

Я занимаюсь разработкой приложения и хочу отобразить форму, которая будет заполнена при редактировании формы, но не будет отображаться, если форма будет новой записью. Я полагаю, что наименее многословный способ сделать это - иметь только одну форму и подавлять любые ошибки для отображения моих переменных, чтобы ничего не печаталось, если это новая форма (поскольку переменные не будут существовать, если это новая форма) , Например:

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

Это хорошая практика или есть лучший способ сделать это? Должен ли я сделать отдельные представления для новых элементов и для элементов, подлежащих редактированию? Как это влияет на производительность?

Ответы [ 3 ]

4 голосов
/ 25 ноября 2008

Вы можете использовать

<?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'); ?>
2 голосов
/ 25 ноября 2008

Я склонен использовать:

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

На самом деле, перебор, но я думаю, что прямо сейчас! $ New_item выдает уведомление, если оно не установлено. Вы также можете отключить второе предложение для! Empty ($ new_item) в зависимости от желаемого поведения.

1 голос
/ 25 ноября 2008

Я думаю, что лучший способ - всегда устанавливать переменную

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

Использование подавления ошибок @ выполняется медленно.

редактировать Обратите внимание, что когда вы печатаете переменную в атрибуте входного значения, вы должны сначала вызвать htmlentities() или htmlspecialchars().

2-е редактирование

В своем комментарии вы говорите, что извлекаете данные как объект, в этом случае вы также можете сделать:

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

Тогда, если это существующая запись, которую вы редактируете, сделайте что-то вроде этого, что приведет к тому, что возвращаемый объект будет экземпляром 'example':

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

или, если это новая запись, создайте ее самостоятельно:

$record = new example(); 

Тогда вы всегда знаете, что $record->somefield будет установлено, и вы можете сделать:

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