高级 php 格式化需要帮助理解布局
Advanced php formatting need help understand layout
函数如下:
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
的函数分配。也使用不带引号的变量。最后是嵌套的问号和冒号。这是如何运作的?
谢谢
函数 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 的一部分。这是一个有用的 shorthand,但 PHP 建议不要像那里那样将它们堆叠在一起(结果是 "non-obvious.")一个简单的看起来像这样:
<?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;
}
函数如下:
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
的函数分配。也使用不带引号的变量。最后是嵌套的问号和冒号。这是如何运作的?
谢谢
函数 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 的一部分。这是一个有用的 shorthand,但 PHP 建议不要像那里那样将它们堆叠在一起(结果是 "non-obvious.")一个简单的看起来像这样:
<?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;
}