36

入力フィールドに変数を出力する必要があるのに、このように変数が設定されているかどうかわからないという問題に遭遇したことがあります。基本的に、これは e_warning を回避するためです。

<input value='<?php if(isset($var)){print($var);}; ?>'>

これを短く書くにはどうすればよいですか?次のような新しい機能を導入しても問題ありません。

<input value='<?php printvar('myvar'); ?>'>

しかし、私は printvar() 関数を書くことに成功しません。

4

11 に答える 11

82

PHP >= 5.x の場合:

issetor関数を作成することをお勧めします。

function issetor(&$var, $default = false) {
    return isset($var) ? $var : $default;
}

これは変数を引数として取り、存在する場合はそれを返し、存在しない場合はデフォルト値を返します。これで、次のことができます。

echo issetor($myVar);

ただし、他の場合にも使用します。

$user = issetor($_GET['user'], 'guest');

PHP >= 7.0 の場合:

PHP 7 以降では、 null 合体演算子を使用できます。

$user = $_GET['user'] ?? 'guest';

またはあなたの使用法で:

<?= $myVar ?? '' ?>
于 2011-04-29T19:43:34.980 に答える
11

別のオプション:

<input value="<?php echo isset($var) ? $var : '' ?>">
于 2011-04-29T19:35:04.690 に答える
1
<input value='<?php @print($var); ?>'>
于 2011-04-29T19:31:27.087 に答える
0

現在、これを実行できるPHPには何もありません。また、PHPでこれを実行する関数を実際に作成することもできません。目標を達成するために次のことを行うことができますが、変数が存在しない場合は変数を定義するという副作用もあります。

function printvar(&$variable)
{
    if (isset($variable)) {
        echo $variable;
    }
}

printvar($foo)これにより、またはを実行できるようになりますprintvar($array['foo']['bar'])。ただし、IMOを実行する最善の方法は、isset毎回使用することです。私はそれが迷惑であることを知っていますが、それを回避する良い方法はありません。使用@はお勧めしません。

詳細については、https://wiki.php.net/rfc/ifsetorを参照してください。

于 2011-04-29T19:36:02.207 に答える
0

適切なテンプレート エンジンを使用することをお勧めします。

とにかくここにあなたの関数があります-varがグローバルスコープに存在する場合にのみ機能します:

function printvar($name) {
    if(isset($GLOBALS[$name])) echo $GLOBALS[$name];
}
于 2011-04-29T19:30:14.000 に答える
0

<?php echo @$var; ?>.またはを行うことができます<?= @$var ?>

于 2011-04-29T19:31:29.880 に答える
-1
<input value='<?php printvar(&$myvar); ?>' />

function printvar(&$val) {
    if (isset($val)) echo $val;
}
于 2011-04-29T19:32:18.023 に答える
-4
$var;
(isset($var)) ? (print $var) : '';

$var = 'hello var';
(isset($var)) ? (print $var) : '';
于 2011-04-29T19:31:04.417 に答える