我在自己的网站www.miroliva.com上使用的是PHP 7.4,并且此行中出现了错误
<header id="header" class="<?php echo esc_attr( ( is_front_page() ) ? 'intro-image': 'intro-blog' ); ?> <?php echo esc_attr( $parallax_class ); ?> <?php echo esc_attr( $menu_style ); ?>" style="background-image: url(' <?php echo esc_url( ( is_front_page() ) ? $intro_image : ( ! get_header_image() ) ? $intro_image : get_header_image() ); ?>');">
我不知道该怎么解决
任何意见?
非常感谢您!
答案 0 :(得分:0)
请保持代码整洁,并从输出中分离逻辑,而不要使用这种混乱的三元代码面条。它更具可读性,您可以更快地跟踪错误。另外,您还将看到您两次执行get_header_image()
以获得1个结果:
... :(!get_header_image()) ? //<< once
$intro_image :
get_header_image() //<< twice
);
所以,做这样的事情
//LOGIC
<?php
$class=[];
$class[] = esc_attr( (is_front_page()) ? 'intro-image' : 'intro-blog' );
$class[] = esc_attr( $parallax_class );
$class[] = esc_attr( $menu_style );
$class = implode(' ',$class);
if( is_front_page() ){
$url = esc_url( $intro_image );
}
else{
$header_image = get_header_image();
if( !$header_image ){
$url = esc_url( $intro_image );
}
else{
$url = esc_url( $header_image );
}
}
?>
//OUTPUT
<header
id="header"
class="<?php echo $class;?>"
style="background-image: url('<?php echo $url;?>');"
>
您得到的错误在这部分:
( is_front_page() )
? $intro_image
( << add extra parenthese
: ( ! get_header_image() )
? $intro_image
: get_header_image()
) << add extra parenthese
答案 1 :(得分:0)
如果您仔细查看确切的错误消息,它将give you all what you need:
Unparenthesized a ? b : c ? d : e is deprecated. Use either (a ? b : c) ? d : e or a ? b : (c ? d : e)
使用Ternary Operator(即a ? b : c
)并将它们堆叠在一起(a ? b : c ? d : e
时,PHP的行为不同于其他语言。
在php中,它将被视为(a ? b : c) ? d : e
,而在许多其他语言中,它将被视为a ? b : (c ? b : e)
。
这是常见错误的来源。为了避免这种错误,PHP仅仅弃用了那些没有括号的三元运算符链。
要解决此问题,只需在需要的地方添加括号。
<header id="header" class="<?php
echo esc_attr(
( is_front_page() ) ? 'intro-image': 'intro-blog' );
?> <?php
echo esc_attr( $parallax_class );
?> <?php
echo esc_attr( $menu_style );
?>" style="background-image: url(' <?php
echo esc_url(
( is_front_page() ) ? $intro_image : (( // add parenthesis here
! get_header_image() ) ? $intro_image : get_header_image() ) // and another here
);
?>');">
我求求你:格式化代码,不要将它们全部放在一行中