36 votes

Aperçu des raccourcis PHP

Je programme en PHP depuis des années, mais je n'ai jamais appris à utiliser les raccourcis. Je les rencontre de temps en temps dans le code et j'ai du mal à les lire. J'aimerais donc apprendre les différentes abréviations qui existent pour le langage afin de pouvoir les lire et commencer à gagner du temps et des lignes en les utilisant, mais je n'arrive pas à trouver un aperçu complet de toutes les abréviations.

Une recherche sur Google montre presque exclusivement le raccourci pour les instructions if/else, mais je sais qu'il doit y avoir plus que cela.

Par raccourci, je parle de choses comme :

($var) ? true : false;

0 votes

Qu'entendez-vous par "sténographie" ?

2 votes

Ce n'est pas Perl, il n'y a pas beaucoup de "shorthand" en PHP. Des moyens plus courts et plus concis de faire certaines choses ? C'est possible. Des raccourcis ? Pas vraiment. Votre code deviendra plus court en apprenant ce que font toutes les différentes fonctions et en trouvant celle qui fait ce que vous voulez, ou en combinant quelques-unes d'entre elles pour obtenir l'effet désiré.

1 votes

Maintenant en PHP 5.4 : print $var ?: 'foo' si vous voulez simplement vérifier si la valeur est véridique ou utiliser une chaîne par défaut de "foo".

70voto

Click Upvote Points 34295

Voici quelques-uns des opérateurs raccourcis utilisés en PHP.

//If $y > 10, $x will say 'foo', else it'll say 'bar'
$x = ($y > 10) ? 'foo' : 'bar';

//Short way of saying <? print $foo;?>, useful in HTML templates
<?=$foo?>

//Shorthand way of doing the for loop, useful in html templates
for ($x=1; $x < 100; $x++):
   //Do something
end for;

//Shorthand way of the foreach loop
foreach ($array as $key=>$value):
   //Do something;
endforeach;

//Another way of If/else:
if ($x > 10):
    doX();
    doY();
    doZ();
else:
    doA();
    doB();
endif;

//You can also do an if statement without any brackets or colons if you only need to
//execute one statement after your if:

if ($x = 100)
   doX();
$x = 1000;

// PHP 5.4 introduced an array shorthand

$a = [1, 2, 3, 4];
$b = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];

8 votes

Comment est-ce que syntaxe alternative "shorthand" ? C'est de la sténographie, si tant est qu'il y en ait une. Je serais d'accord avec <?= si elle n'était pas découragée et si elle s'appuyait sur des balises ouvertes courtes.

0 votes

$x = 'xxxx'; $x && $array['new'] = $x . Qu'est-ce que cela signifie ?

0 votes

$x = 'xxxx'; if($x AND ($array['news'] = $x)) { // nothing }

22voto

Felix Kling Points 247451

Introduction de PHP 5.3 :

$foo = $bar ?: $baz;

qui attribue la valeur de $bar a $foo si $bar évalue à true (sinon $baz ).

Vous pouvez également imbriquer l'opérateur ternaire (en utilisant correctement les parenthèses).

En dehors de cela, il n'y a pas grand-chose d'autre. Vous pourriez vouloir lire le documentation .

0 votes

@Felix Est-ce que cela serait comparé à la || en JavaScript ?

1 votes

@Jacob Relkin : Je ne peux pas dire si cela fonctionne de la même manière dans tous les cas mais en général cela a le même effet (pour être très exact, || en JS est || en PHP aussi ;) (il renvoie juste un booléen en PHP et non la valeur)).

0 votes

@Felix Ouais, c'est à peu près ce que je pensais :)

16voto

mfonda Points 4507

L'un de mes "trucs" préférés en PHP est d'utiliser la fonction union de tableaux dans des situations telles que les fonctions qui prennent un tableau d'arguments, en se rabattant sur les valeurs par défaut.

Par exemple, considérez la fonction suivante qui accepte un tableau comme argument, et qui a besoin de savoir que les clés 'color' , 'shape' et size sont fixés. Mais peut-être que l'utilisateur ne sait pas toujours ce qu'ils seront, donc vous voulez leur fournir des valeurs par défaut.

Pour une première tentative, on peut essayer quelque chose comme ceci :

function get_thing(array $thing)
{
    if (!isset($thing['color'])) {
        $thing['color'] = 'red';
    }
    if (!isset($thing['shape'])) {
        $thing['shape'] = 'circle';
    }
    if (!isset($thing['size'])) {
        $thing['size'] = 'big';
    }
    echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
}

Cependant, l'utilisation de l'opérateur d'union de tableaux peut être un bon "raccourci" pour rendre cela plus propre. Considérons la fonction suivante. Elle a exactement le même comportement que la première, mais elle est plus claire :

function get_thing_2(array $thing)
{
    $defaults = array(
        'color' => 'red',
        'shape' => 'circle',
        'size'  => 'big',
    );
    $thing += $defaults;
    echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
}    

Une autre chose amusante est fonctions anonymes (et les fermetures, introduites en PHP 5.3). Par exemple, pour multiplier chaque élément d'un tableau par deux, vous pouvez simplement faire ce qui suit :

array_walk($array, function($v) { return $v * 2; });

0 votes

array_map peut également être utilisé pour faire la même chose que array_walk ?

0 votes

Ils sont similaires. array_map accepte un tableau par valeur et renvoie un nouveau tableau, tandis que array_walk modifie le tableau lui-même.

1 votes

+1 pour équilibrer le downvote aléatoire. C'est un code légitime. Je préfère array_merge($defaults, $thing) mais les syndicats sont aussi très bien.

3voto

Jacob Relkin Points 90729

C'est ce qu'on appelle le ternaire opérateur, un opérateur booléen qui a trois opérandes :

Le premier est l'expression booléenne à évaluer.

La seconde est l'expression à exécuter si l'expression booléenne vaut VRAI.

La troisième est l'expression à exécuter si l'expression booléenne donne la valeur FALSE.

3 votes

De plus, cet opérateur existe dans la plupart des langages de type C, pas seulement en php.

1voto

Mattygabe Points 987

Ainsi, Jacob Relkin a tout à fait raison de dire que le "shorthand" que vous mentionnez s'appelle effectivement l'opérateur "ternaire", et comme l'ajoute Sam Dufel, il est très répandu dans d'autres langues. En fonction de la manière dont le langage l'implémente, il se peut même que le serveur interprète plus rapidement la logique, et que vous puissiez la lire plus rapidement.

Parfois, lorsque vous apprenez un nouvel élément de logique ou de nouveaux opérateurs comme celui-ci, il est utile de penser à l'anglais (ou à votre langue maternelle) pour l'adapter. Décrivez-le en une phrase. Parlons de votre exemple :

($var) ? true : false;

Voici ce qu'il faut lire :

Est-ce que $var est vrai ? Si $var est, retourner la valeur true . Si $var est faux, retourner la valeur false .

Le point d'interrogation vous rappelle que vous posez une question qui détermine le résultat.

Un cas plus courant d'utilisation de l'opérateur ternaire est celui où vous vérifiez quelque chose qui n'est pas nécessairement un booléen, mais que vous pouvez utiliser la logique booléenne pour le décrire. Prenons par exemple l'objet Car qui a une propriété appelée color qui est une variable de type chaîne de caractères (en PHP). Vous ne pouvez pas demander si une chaîne est vraie ou fausse, car cela n'a aucun sens, mais vous pouvez poser différentes questions à son sujet :

$output = $car->color == "blue" ? "Wheee this car is blue!" : "This car isn't blue at all.";

echo $output;

Cette ligne se lit donc comme suit :

La couleur de la voiture est-elle la même que celle de la chaîne "bleu" ?
Si c'est le cas, retourne la chaîne "Whee this car is blue !" sinon retourne la chaîne "Cette voiture n'est pas bleue du tout".

Ce que l'opérateur ternaire renvoie est utilisé dans le côté droit d'une instruction d'affectation avec $output, et cette chaîne est ensuite imprimée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X