Строгие стандарты PHP выдают ошибку на подкласс, который не переопределяет метод суперкласса - PullRequest
0 голосов
/ 20 марта 2019

Я сталкиваюсь со следующим предупреждением:

Строгие стандарты: объявление FGLU_Activity :: delete () должно быть совместимо с FGLU_Entity :: delete ($ id, $ commit = true) в ...

FGLU_Activity расширяет FGLU_Entity и НЕ переопределяет метод static :: delete.

Есть ли какие-либо советы о том, как избежать этой ошибки в следующий раз, когда я столкнусь с ней?

<?php

class FGLU_Entity {

    /*
     * ...
     */


    static function delete($id,$commit=true) {

        global $wpdb;

        // first, delete any rows in mapped tables
        $total_count = 0;
        if ($commit) $wpdb->query("START TRANSACTION");

        $instance = new static::$class_name();
        $instance->{static::$key} = $id;

        /*
         * ...
         */

        // then, delete the base row
        $needles = array("xa_table","xa_key","xa_id");
        $threads = array(static::$table,static::$key,$id);
        $sql = fglu_sql(FGLU_SQL_DELETE,$needles,$threads);
        $row_count = $wpdb->query($sql);
        if ($row_count === false) {
            fglu_setError(__METHOD__,"SQL Error<br/>$sql<br/>$wpdb->last_error");
            if ($commit) $wpdb->query("ROLLBACK");
            return false;
        } else {
            if ($commit) $wpdb->query("COMMIT");
            $total_count += $row_count;
            return $total_count;
        }

    }
    /**/


}


class FGLU_Activity extends FGLU_Entity {

    // Keys
    public $activity_id;

    // Required Attributes
    public $name;                   
    public $short;                  

    public $activity_cd;            
    public $display_order;          
    public $private = 0;            
    public $school_visit = 0;       
    public $report = 0;             
    public $capacity = 0;           

    // System Attributes

    public $id_user;
    public $dt_updated;

    /*
     * ...
     */

}

?>

1 Ответ

0 голосов
/ 20 марта 2019

FGLU_Activity расширяет FGLU_Entity и НЕ переопределяет метод static :: delete.

Любые подсказки о том, как избежать этой ошибки в следующий раз, когда я столкнусь с ней?

У вас есть подкласс, содержащий метод delete () с аргументами, которые не совпадают с аргументами метода delete () в родительском классе.Это не совсем ошибка.Если функциональность не совпадает, переименуйте дочерний метод, чтобы показать это, или, если это так, но аргументы в родителях излишни, добавьте FGLU_Activity ($ id = NULL, $ commit = NULL).

Youне получил бы эту ошибку, если бы вы также не объявили метод в дочернем классе.

Либо это, либо я действительно что-то упустил.Статические методы по-прежнему подчиняются стандартным правилам, касающимся видимости, наследования и т. Д., Поэтому здесь проблема не в этом.

...