2017-04-04 77 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; 
}