web-dev-qa-db-ja.com

PHP 7 - クラスメソッドの互換性の問題

Php 7.0にアップグレードした後に、このファイル内のどの関数/ステートメントが致命的エラーを引き起こすのかを私が判断するのを手伝ってくれる人はいますか? PHP 5.6ではすべてがうまくいきます。

0行目のエラー:「theme_navigation :: update()の宣言はWP_Widget :: update($ new_instance、$ old_instance)と互換性があるはずです」

コード:

class theme_navigation extends WP_Widget {
public function __construct() {
    parent::__construct(
        'theme_navigation', // Base ID
        'Child Page Navigation', // Name
        array('description' => '') // Args
    );
}

function form($instance){
    $instance['tiutle'] = apply_filters( 'widget_title', $instance['title'] ); ?>
  <p>Title: <input name="cpn_title" id="cpn_title" type="text" <?php if(isset($instance['title']) && $instance['title'] != "") echo 'value="'.$instance['title'].'"'; ?> /></p>
  <p>Sort by Sort Order? <input name="cpn_sort" id="cpn_sort" type="checkbox" <?php if(isset($instance['sort']) && $instance['sort']) echo 'checked="checked"'; ?> value="1" /></p>
<?php }

function update(){
    if(!isset($_POST['cpn_sort']))
        $_POST['cpn_sort'] = 0;

    foreach($_POST as $field => $val){
        if(substr($field,0,4) != "cpn_")
            continue;

        $opts[substr($field,4)] = attribute_escape($_POST[$field]);
        unset($_POST[$field]);
    }

    return $opts;
}

function widget($args,$instance){
    global $post;
    $instance['title'] = apply_filters( 'widget_title', $instance['title'] );

    $page_arr = array('child_of' => $post->ID, 'parent' => $post->ID);

    if($instance['sort'])
        $page_arr['sort_column'] = 'menu_order';

    $pages = get_pages($page_arr);

    if($post->post_parent && !count($pages))
        $page_arr['child_of'] = $page_arr['parent'] = $post->post_parent;
        $pages = get_pages($page_arr);

    if(!count($pages))
        return;

    echo $args['before_widget'];

    if(isset($instance['title']) && $instance['title'] != "")
        echo $args['before_title'].$instance['title'].$args['after_title'];

    echo "<ul>";

    foreach($pages as $page){
        echo "<li><a href='".get_permalink($page->ID)."'>".get_the_title($page->ID)."</a></li>";
    }

    echo "</ul>".$args['after_widget'];
}
}
add_action( 'widgets_init', create_function( '', 'register_widget( "theme_navigation" );' ) );
1
Oksana Romaniv

クラス継承の関数には同じ関数引数が必要です。

そのため、コード内でfunction update()update($new_instance, $old_instance)に置き換えます。

5
Anton Lukin