【问题标题】:PHP Strict Standards throwing error on subclass that does not override superclass methodPHP 严格标准在不覆盖超类方法的子类上抛出错误
【发布时间】:2019-08-11 05:08:43
【问题描述】:

我遇到以下警告:

严格标准:FGLU_Activity::delete() 的声明应与...中的 FGLU_Entity::delete($id, $commit = true) 兼容

FGLU_Activity 扩展了 FGLU_Entity 并且不覆盖静态 ::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;

    /*
     * ...
     */

}

?>

【问题讨论】:

  • 向我们展示这两个类的代码?
  • 将其添加到问题中,而不是作为评论
  • childdelete方法会删除什么?也许它需要$id 作为参数
  • 类中的大部分代码我都省略了,但重点是在child中没有定义静态delete方法。它只是从基类继承而来。代码有效(记录被删除),但当 PHP 以严格标准执行时会引发警告。
  • 在这个类中还有其他名为delete的符号吗?

标签: php class standards strict implements


【解决方案1】:

FGLU_Activity 扩展了 FGLU_Entity 并且不覆盖静态 ::删除方法。

关于下次遇到此错误时如何避免此错误的任何提示?

您有一个包含 delete() 方法的子类,其参数与父类中的 delete() 方法中的参数不匹配。这并不是一个真正的错误。如果功能不匹配,请重命名子方法以显示这一点,或者如果确实如此,但父项中的参数是多余的,请添加 FGLU_Activity($id=NULL,$commit=NULL)。

如果您没有在子类中声明该方法,则不会出现此错误。

要么这样,要么我真的错过了一些东西。静态方法仍然受制于可见性、继承等方面的标准规则,所以这不是真正的问题。

【讨论】:

  • 你说的很对,我错过了子类中的delete方法。谢谢。
猜你喜欢
  • 2011-08-28
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2012-11-05
  • 2013-12-10
相关资源
最近更新 更多