2015-12-23 1 views
3

Je teste un champ de demande de publication sur un script qui peut être appelé à partir de la ligne de commande ou via HTTP en tant que requête GET ou POST. En tant que tel, $_POST peut être indéfini. Existe-t-il un moyen simple de réécrire cette déclaration?Test de pré-condition à jour?

if (isset($_POST) && isset($_POST['function']) && $_POST['function'] == "login"): 

je pouvais supprimer les erreurs avec le @ -operator - est que les mauvaises pratiques?

if (@$_POST['function'] == "login"): 

je pourrais utiliser l'opérateur coalesce null PHP 7.0, mais qui introduit un inutile littéral purement conçu pour lancer une false:

if (($_POST['function'] ?? null) == "login"): 
+1

Probablement pas trop populaire d'une opinion, mais je pense que cela est un cas où l'utilisation de la suppression d'erreur est justifiée. Les implications lorsque cet indice n'existe pas sont évidentes. –

+0

Des variantes de cette question sont demandées de temps en temps. Je recommande toujours d'arrêter de prendre soin, d'écrire une fonction wrapper personnalisée et d'utiliser simplement 'if (get_input ('function') == 'login')'. –

+0

@DanielSloof Pas besoin d'utiliser 'php_sapi_name()' – RiggsFolly

Répondre

2

Si elle aide, vous n'avez pas besoin à la fois des tests isset() :

if (isset($_POST['function']) && $_POST['function'] == "login"): 

fonctionnera correctement si $_POST n'est pas réglé. Par exemple:

php > var_dump(isset($notset[123][456])); 
bool(false) 
php > 

Je considérerais également que votre utilisation de l'opérateur null-coalesce est correcte et propre.

if (($_POST['function'] ?? null) == "login"): 

Cela me semble génial.

Vous pouvez aussi abstraite cette logique derrière un certain type de fonction enveloppe:

function getFunction() 
{ 
    return ($_POST['function'] ?? null); 
} 

Ou, pour les personnes âgées PHP:

function getFunction() 
{ 
    return isset($_POST['function']) ? $_POST['function'] : null); 
}