PHP错误。不带括号的b c d e已弃用。使用(a b c)d e或a b(c d e)

时间:2020-09-30 09:24:16

标签: php

我在自己的网站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() ); ?>');">

我不知道该怎么解决

任何意见?

非常感谢您!

2 个答案:

答案 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
      ); 
    ?>');">

我求求你:格式化代码,不要将它们全部放在一行中