2017-04-04 2 views
0

を理解する必要がある機能:高度なPHPの書式設定は、ここでは、レイアウト

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]"; 
} 

これはcodefightsのソリューションです。定義されたパラメータの下でフォーマットを処理します。変数$f$wへの関数の割り当てを理解しようとしています。また、引用符のない変数の使用。最後にネストされた疑問符とコロン。これはどのように機能していますか?

おかげ

+1

、これは意図的です鈍いコードと合理的な人はこのようなコードを書くだろう。 – miken32

答えて

0

機能preg_match()変数$fに割り当てられたコードで後で再利用されています。 $wは、単純にpreg_match()という結果になります。例:

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

引用符で囲まれていない値は、最初は定数として解釈され、未定義定数は文字列として解釈されます。ここでは、適切な定数の定義がどのように見えるかです:

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

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

疑問符とコロンがternary statementの一部です。これは便利な速記ですが、PHPが行われているようにそれらを一緒にスタッキングしないことを推奨しますシンプルなものは次のようになります(結果が「非自明。」):あなたが意識されるように

<?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; 
}