#php #class #standards #strict #implements
#php #класс #стандарты #строгий #реализует
Вопрос:
Я сталкиваюсь со следующим предупреждением:
Строгие стандарты: Объявление 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. покажите нам код обоих классов?
2. добавьте это в вопрос, а не в комментарий
3. Дочерний
delete
метод удалит что? Может быть, это нужно$id
также в качестве аргумента???????????4. Я опустил большую часть кода в классах, но дело в том, что статический метод удаления не определен в дочернем. Он просто наследуется от базового класса. Код работает (записи удаляются), но он выдает предупреждение, когда PHP выполняется со строгими стандартами.
5. есть ли какие-либо другие символы, названные
delete
в этом классе?
Ответ №1:
FGLU_Activity расширяет FGLU_Entity и не переопределяет метод static ::delete.
Есть какие-либо подсказки относительно того, как избежать этой ошибки в следующий раз, когда я с ней столкнусь?
У вас есть подкласс, содержащий метод delete() с аргументами, которые не совпадают с аргументами метода delete() в родительском классе. На самом деле это не ошибка. Если функциональность не соответствует, переименуйте дочерний метод, чтобы показать это, или, если это так, но аргументы в родительских файлах излишни, добавьте FGLU_Activity($id=NULL,$commit=NULL).
Вы бы не получили эту ошибку, если бы вы также не объявили метод в дочернем классе.
Либо это, либо я действительно что-то упускаю. Статические методы по-прежнему подчиняются стандартным правилам, касающимся видимости, наследования и т.д., Так что на самом деле проблема здесь не в этом.
Комментарии:
1. вы абсолютно правы, я пропустил метод delete в подклассе. Спасибо.