谁能帮我修复这个php字符串混乱?
echo '<nav class="navEl"><a href="' . $route . '" '.($_SERVER['REQUEST_URI'] == '/' . $route) ? 'style="color:' . $currentPathColor . '"' : '' . '>' . $route . '</a></nav>';
这是应该做的(This works):
if ($_SERVER['REQUEST_URI'] == '/' . $route) {
echo '<nav class="navEl"><a href="' . $route . '" style="color:' . $currentPathColor . '">' . $route . '</a></nav>';
} else {
echo '<nav class="navEl"><a href="' . $route . '">' . $route . '</a></nav>';
}
只是练习PHP的目的是了解它的一些东西,提前感谢!
我可以理解想要减少代码的重复,因此我建议将通用html放在两个单独的部分,中间是if
。这与您试图获得的相同,但具有(IMHO)更可维护的结构…
echo '<nav class="navEl"><a href="' . $route;
if ($_SERVER['REQUEST_URI'] == '/' . $route) {
echo '" style="color:' . $currentPathColor;
}
echo '">' . $route . '</a></nav>';
(我没有测试过,所以不能100%保证报价是正确的,但我希望你能明白。)
由于PHP是一个模板引擎,您可以利用它并保持可读性。
$style = ($_SERVER['REQUEST_URI'] === "/$route") ? "style='color:$currentPathColor'" : '';
echo <<<_HTML
<nav class="navEl"><a href="$route" $style>$route</a></nav>
_HTML;
其他人已经给出了一些合理的替代样式,但是为了解决当前的问题,您的问题是操作符优先级之一。
按照优先级顺序,你有:
- 带括号的表达式
.
连接操作符- 三元
?:
运算符
PHP的计算方式是这样的:
// Parentheses
$boolean = $_SERVER['REQUEST_URI'] == '/' . $route;
// Concatenation
$string_1 = '<nav class="navEl"><a href="' . $route . '" '. $boolean;
$string_2 = 'style="color:' . $currentPathColor . '"';
$string_3 = '' . '>' . $route . '</a></nav>';
// Ternary
$chosen_string = $string_1 ? $string_2 : $string_3;
// echo
echo $chosen_string;
但是你想要的是:
// String sections
$prefix = '<nav class="navEl"><a href="' . $route . '" ';
$suffix_a = 'style="color:' . $currentPathColor . '"';
$suffix_b = '' . '>' . $route . '</a></nav>';
// Condition
$condition = $_SERVER['REQUEST_URI'] == '/' . $route;
// Ternary
$chosen_suffix = $condition ? $suffix_a : $suffix_b;
// Combine
$string = $prefix . $chosen_suffix;
// echo
echo $string;
所以除了条件括号外,你还需要在整个"后缀"Section,让它先求值:
echo
'<nav class="navEl"><a href="' . $route . '" '
.
(
( $_SERVER['REQUEST_URI'] == '/' . $route )
?
'style="color:' . $currentPathColor . '"'
:
'' . '>' . $route . '</a></nav>'
);
由于这种错误很容易犯,并且结果很容易被误解,因此通常最好避免这样的复杂表达式,并引入中间变量,使用if
语句等。