>source

내가하는 일을 모르겠지만 다른 유사한 질문을 읽을 때, 변경하기 전에 이것이 올바른지 알고 싶었다

오류가 발생합니다 더 이상 사용되지 않는 PHP4 스타일 클래스 생성자의 사용은 PHP 7부터 지원되지 않습니다 내 WP 블로그에서 호환성 테스트를 실행할 때

이 두 줄을 참조

   function boc_latest() {         
        $widget_ops = array('description' => 'Aqua Latest Posts');          
        $this->WP_Widget('boc_latest', 'Aqua Latest Posts', $widget_ops);           
    }           

function contact_info_widget()      
{       
    $widget_ops = array('classname' => 'contact_info', 'description' => '');    
    $this->WP_Widget('contact_info-widget', 'Aqua: Contact Info', $widget_ops); 
}  

간단히 기능을 바꾸겠습니까?

   function __construct() {            
        $widget_ops = array('description' => 'Aqua Latest Posts');          
        $this->WP_Widget('boc_latest', 'Aqua Latest Posts', $widget_ops);           
    }           

function __construct()      
{       
    $widget_ops = array('classname' => 'contact_info', 'description' => '');    
    $this->WP_Widget('contact_info-widget', 'Aqua: Contact Info', $widget_ops); 
}      

여기에 전체 PHP 파일이 있습니다

function boc_load_widgets() {
    register_widget('boc_latest');
    register_widget('contact_info_widget');
}   

class boc_latest extends WP_Widget {
        function boc_latest() {
            $widget_ops = array('description' => 'Aqua Latest Posts');
            $this->WP_Widget('boc_latest', 'Aqua Latest Posts', $widget_ops);
        }
        function widget($args, $instance) {
            extract($args, EXTR_SKIP);
            echo $before_widget;
            $title = empty($instance['title']) ? '&nbsp;' : '<span>'.apply_filters('widget_title', $instance['title']).'</span>';
            $count = $instance['count'];
            echo removeSpanFromTitle($before_title) . $title . removeSpanFromTitle($after_title);
            wp_reset_query();
            rewind_posts();
            $recent_posts = new WP_Query(
                array(
                    'posts_per_page' => $count,
                    'post_status' => 'publish',
                    'nopaging' => 0,
                    'post__not_in' => get_option('sticky_posts')
                    )
                );
            // Cycle through Posts    
            if ($recent_posts->have_posts()) :while ($recent_posts->have_posts()) : $recent_posts->the_post();
            ?>
            <div class="boc_latest_post clearfix">
                <a href="<?php the_permalink() ?>"><?php the_post_thumbnail('small-thumb'); ?></a>
                <p class="boc_latest_post_title"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p>
                <p class="date"><?php echo get_the_date();?></p>
            </div>
                <?php
                endwhile;
                endif;
                wp_reset_query();
                rewind_posts();
                echo $after_widget;
            }
            function update($new_instance, $old_instance) {
                $instance = $old_instance;
                $instance['title'] = strip_tags($new_instance['title']);
                $instance['count'] = $new_instance['count'];
                return $instance;
            }
            function form($instance) {
                $instance = wp_parse_args((array) $instance, array('title' => ''));
                $title = strip_tags($instance['title']);
                $count = $instance['count'];
                ?>

                <p>
                    <label for="<?php echo $this->get_field_id('title'); ?>">Widget Title:
                        <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" />
                    </label>
                </p>
                <p>
                    <label for="<?php echo $this->get_field_id('count'); ?>">How many posts? (Number):
                        <input class="widefat" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" type="text" value="<?php echo esc_attr($count); ?>" />
                    </label>
                </p>
                <?php
            }
}

/**
 * Contact Info Widget
 */
class contact_info_widget extends WP_Widget {
    function contact_info_widget()
    {
        $widget_ops = array('classname' => 'contact_info', 'description' => '');
        $this->WP_Widget('contact_info-widget', 'Aqua: Contact Info', $widget_ops);
    }
    function widget($args, $instance)
    {
        extract($args);
        $title = apply_filters('widget_title', $instance['title']);
        echo $before_widget;
        if($title) {
            echo $before_title.$title.$after_title;
        }
        ?>
        <?php if($instance['phone']): ?>
        <div class="icon_phone"><?php echo $instance['phone']; ?></div>
        <?php endif; ?>
        <?php if($instance['email']): ?>
        <div class="icon_mail"><?php echo $instance['email']; ?></div>
        <?php endif; ?>
        <?php if($instance['address']): ?>
        <div class="icon_loc"><?php echo $instance['address']; ?></div>
        <?php endif; ?>
        <div class="clear h10"></div>
        <?php
        echo $after_widget;
    }
    function update($new_instance, $old_instance)
    {
        $instance = $old_instance;
        $instance['title'] = $new_instance['title'];
        $instance['address'] = $new_instance['address'];
        $instance['phone'] = $new_instance['phone'];
        $instance['fax'] = $new_instance['fax'];
        $instance['email'] = $new_instance['email'];
        $instance['web'] = $new_instance['web'];
        return $instance;
    }
    function form($instance)
    {
        $defaults = array('title' => 'Contact Info');
        $instance = wp_parse_args((array) $instance, $defaults); ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">Title:</label>
            <input class="widefat" style="width: 216px;" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $instance['title']; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('phone'); ?>">Phone:</label>
            <input class="widefat" style="width: 216px;" id="<?php echo $this->get_field_id('phone'); ?>" name="<?php echo $this->get_field_name('phone'); ?>" value="<?php echo $instance['phone']; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('email'); ?>">Email:</label>
            <input class="widefat" style="width: 216px;" id="<?php echo $this->get_field_id('email'); ?>" name="<?php echo $this->get_field_name('email'); ?>" value="<?php echo $instance['email']; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('address'); ?>">Address:</label>
            <input class="widefat" style="width: 216px;" id="<?php echo $this->get_field_id('address'); ?>" name="<?php echo $this->get_field_name('address'); ?>" value="<?php echo $instance['address']; ?>" />
        </p>
    <?php
    }
}

  • 답변 # 1

    class boc_latest extends WP_Widget {
        function boc_latest(){
           ...
        }
    }
    
    

    function boc_latest()   function __construct() 로 이름을 바꿔야합니다  클래스 이름이 메소드 (함수) 이름과 동일하기 때문입니다.

    class boc_latest extends WP_Widget {
        function __construct(){
           ...
        }
    }
    
    

    이것은 보편적으로 적용된다;클래스에동일한이름을 가진 함수가 있고 __construct 가없는 함수  존재하는 경우 해당 함수/방법은 __construct() 로 이름을 바꿔야합니다.  해당 클래스의 메소드.

    설명서에서

    와이즈 비즈 와이즈 비즈  주어진 클래스에 대한 함수, 클래스 이름으로 구식 생성자 함수를 검색합니다.

         

    이전 스타일 생성자는 PHP 7.0에서 더 이상 사용되지 않으며 이후 버전에서 제거 될 예정입니다. 항상

    For backwards compatibility with PHP 3 and 4, if PHP cannot find a 를 사용해야합니다  새 코드에서.

    __construct()

관련 자료

  • 이전 android - Play 스토어에서 설치된 앱의 오버레이 그리기 권한
  • 다음 angular - 업로드 api에서 페이로드 응답 받기