2017-04-04 7 views
0

Voici la fonction:mise en forme de php avancée doit aider à comprendre la mise en page

function simplePresent($e) { 

    $w = ($f = preg_match)('/ey|se|d |[sI]$|We/', $a = $e[0]); 

    be == ($b = $e[1]) 
    ? 
    $b = $w ? $a == I ? am : are : is 
    : 
    $w ?: $b = $b == have ? has : $b .= $f('/[h-z]$/', $b) ? es : s; 

    return "$a $b $e[2]"; 
} 

c'est une solution sur codefights. il gère le formatage sous des paramètres définis. J'essaie de comprendre l'affectation de la fonction aux variables $f et $w. Aussi l'utilisation de variables sans guillemets. enfin les points d'interrogation et les deux-points imbriqués. Comment cela fonctionne-t-il?

Merci

+1

Comme vous le savez peut-être, cela est volontairement code obtus et aucune personne raisonnable n'écrirait un code comme celui-ci. – miken32

Répondre

0

La fonction preg_match() est attribuée à la $f variable et réutilisés ultérieurement dans le code. $w est simplement le résultat de preg_match(). Par exemple:

<?php 
$w = ($f = 'sprintf')("foo"); 
// same as this: 
$f = 'sprintf'; 
$w = $f("foo"); 
// which is the same as this: 
$w = sprintf('foo'); 

Les valeurs non cotées seront d'abord interprétées comme des constantes, et les constantes non définies seront interprétées comme des chaînes. Voici comment une bonne définition constante ressemble:

<?php 
define("foo", "bar"); 
echo foo; 
echo bar; 
// PHP Notice: Use of undefined constant bar - assumed 'bar' 

// same as this: 
echo "bar"; 
echo "bar"; 

Les points d'interrogation et font partie d'côlons un ternary statement. Ceci est un raccourci utile, mais PHP recommande de les empiler ensemble comme cela se fait là-bas (le résultat est « non évidente ».) Un simple ressemble à ceci:

<?php 
echo ($foo == "foo" ? "equal" : "inequal"); 
$a = $b ? $c : $d; 

// this is the same as: 
if ($foo == "foo") { 
    echo "equal"; 
} else { 
    echo "inequal"; 
} 
if ($b) { 
    $a = $c; 
} else { 
    $a = $d; 
}