web-dev-qa-db-fra.com

Quel est le PHP raccourci pour: print var si var existe

Nous l'avons tous déjà rencontré auparavant, ayant besoin d'imprimer une variable dans un champ de saisie sans savoir avec certitude si la variable est définie, comme ceci. Fondamentalement, ceci est d'éviter un e_warning.

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

Comment puis-je écrire ce court? Je vais bien introduire une nouvelle fonction comme celle-ci:

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

Mais je n'arrive pas à écrire la fonction printvar ().

30
bart

Pour PHP> = 5.x:

Ma recommandation serait de créer une fonction issetor:

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

Cela prend une variable en argument et la renvoie, si elle existe, ou une valeur par défaut, si ce n'est pas le cas. Maintenant vous pouvez faire:

echo issetor($myVar);

Mais aussi l'utiliser dans d'autres cas:

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

Pour PHP> = 7.0:

A partir de PHP 7, vous pouvez utiliser l'opérateur null-coalesce :

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

Ou dans votre utilisation:

<?= $myVar ?? '' ?>
63
NikiC

Une autre option:

<input value="<?php echo isset($var) ? $var : '' ?>">
9
Galen
<input value='<?php @print($var); ?>'>
3
Erik J. Olson

La réponse la plus courte que je puisse trouver est <?php isset($var) AND print($var); ?>

Plus de détails sont ici sur php manuel .

L'utilisation de AND est une alternative simple à une instruction if, qui ressemble presque à un opérateur ternaire. Considérer ce qui suit:

Cela ne fonctionne pas avec echo () pour une raison quelconque. Je trouve cela extrêmement utile!

2
McAngujo

Vous pouvez faire <?php echo @$var; ?>. ou <?= @$var ?>.

0
Dan Breen

Il n'y a actuellement rien dans PHP qui puisse le faire, et vous ne pouvez pas écrire une fonction dans PHP pour le faire non plus. Vous pouvez effectuer les opérations suivantes pour atteindre votre objectif, mais cela a également pour effet secondaire de définir la variable si elle n'existe pas:

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

Cela vous permettra de faire printvar($foo) ou printvar($array['foo']['bar']). Cependant, la meilleure façon de le faire, OMI, est d'utiliser isset à chaque fois. Je sais que c'est agaçant, mais il n'y a pas de bonne solution. L'utilisation de @ n'est pas recommandée.

Pour plus d'informations, voir https://wiki.php.net/rfc/ifsetor .

0
mfonda

Cela a fonctionné pour moi:

<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?>
0
Jani

Mieux vaut utiliser un moteur de modèle approprié - https://stackoverflow.com/q/3694801/298479 mentionne deux exemples intéressants.

Voici votre fonction quand même - elle ne fonctionnera que si la variable existe dans la portée globale:

function printvar($name) {
    if(isset($GLOBALS[$name])) echo $GLOBALS[$name];
}
0
ThiefMaster