2013-06-06 2 views
0

Я знаю, что этого можно избежать, просто используя другое имя метода, но мне было любопытно, возможно ли следующее.php Перезаписать метод и вызвать перезаписанный

У меня есть этот класс: (конечно, у него есть еще несколько методов, но они не имеют отношения к вопросу)

class db extends mysqli { 
    public function query($sql){ 
     $sql = $this->parent->query($sql); 

     if($this->error){ 
      echo "<script>popup('SQL error bro!');</script>"; 
     }else{ 
      return $sql; 
     } 
    } 
} 

То, что я хочу сделать, это вызвать оригинальный Mysqli запрос() метод из внутри query(), который я создал. Возможно ли, или я начну переименование?

А также я хотел бы указать, что это исключительно для использования в целях развития, я знаю, что пользователи не должны видеть ошибки sql. Причина, по которой я хочу сделать это, - это то, что сегодня мне нужно было изменить имя столбца таблицы с id на vid, тогда вся моя система перестала работать, и я потратил 30 минут на исследование, я бы просто хотел предотвратить это в будущем.

ответ

1

Изменить

$this->parent->query($sql); 

Для

$sql = parent::query($sql); 
+0

По какой-то причине ни один из этих синтаксисов не вызывает ошибку, но ни один из них не вторит этому маленькому скрипту, когда я намеренно провоцирую ошибку. O.o –

+0

вам нужно включить error_reporting .. и display_error – Baba

+0

Проблема была глупой, как обычно. Этот класс является singleton и в методе getInstance я вызывал новый mysqli не новый db. Спасибо! –

1

Возможно, но не может быть наилучшей практики:

parent::query($sql) 
+0

Почему вы пересматриваете его, возможно, не лучшие практики? –

+0

Я не реконструирую, но некоторые люди будут жаловаться, что :: похоже, что вы вызываете статический метод, а вы нет. – somedev

Смежные вопросы