2010-04-21 3 views
0
if (isset($_GET['sort_by']) && strlen($_GET['sort_by']) > 0) 
{ 
    $sort_by = $_GET['sort_by']; 
} 
else 
{ 
    $sort_by = 'desc'; 
} 

comment puis-je réécrire cette façon, il semble plus propre et a moins de lignes .. J'aime un liners hehecode php propre

Répondre

5

La première option est juste pour déplacer la valeur par défaut en dehors du cas bloc et ainsi supprimer l'autre. Si vous voulez garder les conditions dans l'instruction if cela (probablement) le meilleur comme il conserve la clarté qui est perdue si vous l'ajoutez dans une instruction en utilisant l'opérateur conditionnel (ternaire).

$sort_by = 'desc' 
if (isset($_GET['sort_by']) && strlen($_GET['sort_by']) > 0){ 
    $sort_by = $_GET['sort_by']; 
} 

Bien que strlen ne reviendra pas moins de 0, vous pouvez supprimer le > 0

$sort_by = 'desc' 
if (isset($_GET['sort_by']) && strlen($_GET['sort_by'])){ 
    $sort_by = $_GET['sort_by']; 
} 

Une autre option est de déplacer tout sur une seule ligne et utiliser l'opérateur conditionnel. L'inconvénient est qu'il prend de l'ampleur (dans mon option) loin de loin et commence à mettre trop d'une ligne.

$sort_by = isset($_GET['sort_by']) && strlen($_GET['sort_by']) ? $_GET['sort_by'] : 'desc'; 

Si vous avez changé la fonctionnalité un peu afin que vous puissiez utiliser empty() l'opérateur conditionnel devient utilisable en raison de la longueur réduite. Le problème est que la chaîne "0" est traitée comme étant vide.

$sort_by = !empty($_GET['sort_by']) ? $_GET['sort_by'] : 'desc'; 
+0

J'aime ce dernier. –

+0

Je pense qu'il devrait être '! Empty()' (ou changer les branches). –

+0

@Felix Je viens de le remarquer. :) – Yacoby

0

quelle que soit la façon dont vous réécrivez (et Yacoby a un bon one-liner pour vous), si vous le faites souvent (chaîne de requête de contrôle nul et strlen vars), vous devriez probablement l'envelopper dans une fonction avec une option "paramètre par défaut").

ie. function getQueryStringVar($key, $defaultValue = '') { ...

+0

je l'aime merci messieurs (ne pas offenser l'intelligence féminine) – vick

1
$sort_by = in_array($_GET['sort_by'], array('asc', 'desc')) ? $_GET['sort_by'] : 'desc'; 

ce vérifie également la vailidity

0

Je pensais que je voudrais ajouter que d'une seule ligne ne signifie toutefois pas automatiquement un code plus propre, Yacoby fait un excellent travail de nettoyage du code (ainsi que rendre un seul paquebot). Cependant, je voudrais ranger son seul paquebot à lire ....

$ sort_by = empty ($ _ GET ['sort_by'])? 'desc': $ _GET ['sort_by'];

Tout simplement parce que le! symbole peut parfois être manqué par quelqu'un qui lit le code - je pense que c'est un plus clair un paquebot à mon avis :)