2012-09-12 55 views
0

J'utilise querystring avec $_REQUEST tableau et chaque fois que je veux accéder à une touche quelconque j'utilise cette condition

if(array_key_exists('scene_id', $_REQUEST)) 

Est-il possible d'utiliser directement $_REQUEST["scene_id"] sans avertissement et les erreurs?

Répondre

4

Vous pouvez envelopper que dans votre propre fonction ofcourse:

function request($key, $default=null) { 
    return isset($_REQUEST[$key]) 
     ? $_REQUEST[$key] 
     : $default; 
} 

echo request('scene_id'); 
+0

Je ne veux pas utiliser des fonctions partout. Cela diminue la capacité de lecture du code. – totten

+2

Je ne sais pas où vous avez eu cette idée, mais c'est fou. Des fonctions existent pour rendre le code plus lisible. Ils le font en le faisant contenir moins de passe-partout répété. demander à des programmeurs de 1000000 et ils vous diront la même chose. – Kris

+0

Je demande seulement à mon patron au sujet de ces concepts :) puisqu'il est le responsable:/ – totten

1

Utilisation isset:

if(isset($_REQUEST['scene_id'])) 

ou

$scene_id = isset($_REQUEST['scene_id']) ? $_REQUEST['scene_id'] : null; 
+0

Je suis déjà en utilisant une technique similaire à celle .. – totten

0

Le plus prefred metthod serait d'utiliser issetif(isset($_REQUEST['scene_id'])) mais vous pouvez effectivement supprimer les messages d'erreur en utilisant @ signe, mais s'il vous plaît noter que l'erreur serait existe encore et aurait besoin de le gérer correctement

De PHP Documentation

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

Exemple 1

if(@$_REQUEST['scene_id']) 
{ 
    echo "ok" ; 
} 

Exemple 2 (filtre, validation ou exception)

try { 
    if (!isset($_REQUEST['scene_id'])) 
     throw new Exception("Missing Scene ID"); 

    if (!filter_var($_REQUEST['scene_id'], FILTER_SANITIZE_NUMBER_INT)) 
     throw new Exception("Only Valid Number Allowed"); 

    echo "Output ", $_REQUEST['scene_id']; 
} catch (Exception $e) { 
    print $e->getMessage(); 
} 

?> 
+2

Ceci est une très mauvaise idée. pourquoi supprimer une erreur dans le code lorsque vous pouvez utiliser une autre option pour le réparer. Mauvaise idée. Utilisez 'isset' – bretterer

+1

@betterer Je pense que vous devriez relire la question' directement utiliser $ _REQUEST ["scene_id"] sans aucun avertissement ni erreur (s) 'la suppression ne signifie pas que vous ne pouvez pas faire le filtrage et la validation appropriés. Il veut n'importe quelle fonction mais accède à '$ _REQUEST [" scene_id "]' directement – Baba

+0

Je pense que c'est la réponse. Merci @Baba. – totten

0

Vous pouvez préremplir _REQUEST $ avec des valeurs par défaut avant de tester pour eux:

$expected = array(
    'scene_id'=>false, 
    'another_var'=>'foo', 
); 

foreach($exptected as $key=>$default) { 

    if (!isset($_REQUEST[$key])) { 
     $_REQUEST[$key] = $default; 
    } 

} 

if ($_REQUEST['scene_id') { 
    // do stuff 
} 
+0

trop de travail à faire. Diminue le suivi du code et la capacité de lecture des autres. – totten