web-dev-qa-db-fra.com

Vue générale de PHP sténographie

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

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

En abrégé, je parle de choses comme:

($var) ? true : false;
34
James Simpson

Voici quelques-uns des opérateurs de sténographie 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];
67
Click Upvote

PHP 5.3 introduit:

$foo = $bar ?: $baz;

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

Vous pouvez également imbriquer l'opérateur ternaire (avec une utilisation correcte de la parenthèse).

Autre que cela, il n'y a pas grand chose d'autre à ce sujet. Vous voudrez peut-être lire le documentation .

22
Felix Kling

L’un de mes «trucs» préférés dans PHP est d’utiliser l’opérateur array union lorsqu’il s’agit de situations telles que des fonctions qui prennent un tableau d’arguments, retenant les valeurs par défaut.

Par exemple, considérons la fonction suivante qui accepte un tableau en tant qu'argument et doit savoir que les clés 'color', 'shape' et 'size' sont définies. Mais peut-être que l'utilisateur ne sait pas toujours ce que ce sera, alors vous voulez lui fournir des valeurs par défaut.

Lors d'une première tentative, on pourrait 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 matrice peut être un bon "raccourci" pour rendre cela plus propre. Considérons la fonction suivante. Il a exactement le même comportement que le premier, mais est plus clair:

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 fermetures, introduites dans PHP 5.3). Par exemple, pour multiplier chaque élément d'un tableau par deux, vous pouvez simplement procéder comme suit:

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

Personne n'a mentionné ??!

<?php
// Example usage for: Null Coalesce Operator
$action = $_POST['action'] ?? 'default';

// The above is identical to this if/else statement
if (isset($_POST['action'])) {
    $action = $_POST['action'];
} else {
    $action = 'default';
}
4
Robert Pounder

C'est ce qu'on appelle l'opérateur ternary , opérateur booléen à trois opérandes:

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

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

La troisième est l'expression à exécuter si l'expression booléenne est évaluée à FALSE.

3
Jacob Relkin

Autre nouveauté dans PHP7: l'opérateur du vaisseau spatial. Surtout utile dans les rappels pour des choses comme usort()

Avant:

usort($list, function ($a, $b) {
    if ($a == $b) return 0;
    return $a < $b;
});

Après:

usort($list, function ($a, $b) { return $a <=> $b; });

Fondamentalement, il renvoie un entier négatif, 0 ou un entier positif basé sur la comparaison du côté gauche avec le côté droit. 

2
Okonomiyaki3000
<?php
class Bob {

    public function isDebug(){
        return true;
    }

    public function debug(){
        echo 'yes dice!!!';
    }
}


$bob = new Bob(); 

($bob->isDebug()) && $bob->debug(); 

Voici une autre version du raccourci . J'espère que cela aidera quelqu'un

1
Natdrip

Jacob Relkin a donc parfaitement raison de dire que la "sténographie" que vous mentionnez s'appelle bien l'opérateur "ternaire" et, comme l'a ajouté Sam Dufel, elle est très répandue dans d'autres langues. En fonction de la manière dont le langage le met en œuvre, le serveur peut même interpréter la logique plus rapidement et vous permettre de la lire plus rapidement.

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

($var) ? true : false;

Qu'est-ce que cela devrait lire comme ceci:

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

Le point d'interrogation vous rappelle que vous posez une question qui détermine la sortie.

Un cas d'utilisation plus courant pour l'opérateur ternaire est lorsque vous vérifiez quelque chose qui n'est pas nécessairement booléen, mais que vous pouvez utiliser la logique booléenne pour le décrire. Prenons par exemple l'objet Car, qui possède une propriété appelée color, qui est une variable de type chaîne (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 à ce sujet:

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

echo $output;

Donc, cette ligne se lit comme suit: 

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

Tout ce que l'opérateur ternaire renvoie est utilisé dans la partie droite d'une instruction d'affectation avec $ output, et cette chaîne est ensuite imprimée.

1
Mattygabe

Depuis la version 5.4, vous avez également des littéraux de tableau, vous n'avez donc plus besoin d'écrire

$myArray = array('some', 'list', 'of', 'stuff');

Vous pouvez simplement écrire:

$myArray = ['some', 'list', 'of', 'stuff'];

Pas une énorme différence mais jolie Nice. 

0
Okonomiyaki3000