Нестатический метод getCurrentUser () не может ссылаться на статический контекст? [Дубликат]

предложения не работают, потому что они предназначены для стандартного драйвера mysql, а не для mysqli,

$this->db_link->error содержит ошибку, если это произошло

или

mysqli_error($this->db_link)

будет работать

64
задан Nathan Hughes 4 May 2017 в 11:32
поделиться

4 ответа

setLoanItem - это метод экземпляра, то есть вам нужен экземпляр класса Media для его вызова. Вы пытаетесь вызвать его по самому типу Media.

Возможно, вам захочется ознакомиться с некоторыми базовыми объектно-ориентированными учебниками, чтобы узнать, как работают члены static / instance.

11
ответ дан Joe Enos 17 August 2018 в 11:41
поделиться

setLoanItem() не является статическим методом, это метод экземпляра, что означает, что он принадлежит определенному экземпляру этого класса, а не самому классу.

По сути, вы не указали какой медиа-объект вы хотите вызвать метод, вы указали только имя класса. Могут существовать тысячи медиа-объектов, и компилятор не знает, что вы имели в виду, поэтому он генерирует ошибку соответственно.

Вероятно, вы захотите передать медиа-объект, на котором вызывается метод:

public void loanItem(Media m) {
    m.setLoanItem("Yes");
}
2
ответ дан Michael Berry 17 August 2018 в 11:41
поделиться

Методы экземпляров необходимо вызывать из экземпляра. Ваш метод setLoanItem является методом экземпляра (он не имеет модификатора static), который должен быть для того, чтобы функционировать (поскольку он устанавливает значение для экземпляра, на который он вызван (this), ). Вам нужно создать экземпляр класса, прежде чем вы сможете вызвать метод на нем:

Media media = new Media();
media.setLoanItem("Yes");

(Btw было бы лучше использовать логическое значение вместо строки, содержащей «Да».)

71
ответ дан Nathan Hughes 17 August 2018 в 11:41
поделиться
  • 1
    Я получаю исключение null-указателя, когда делаю это, хотя ... Как вы думаете, проблема? Сообщите мне, нужен ли вам какой-либо код. Благодаря! (Застрял на этом в течение 3 с половиной часов!) – Ruchir Baronia 10 December 2015 в 06:48
  • 2

Вам нужно правильно отделить статические данные от данных экземпляра. В вашем коде onLoan и setLoanItem() являются членами экземпляра. Если вы хотите ссылаться / называть их, вы должны сделать это через экземпляр. Таким образом, вы либо хотите

public void loanItem() {
    this.media.setLoanItem("Yes");
}

, либо

public void loanItem(Media object) {
    object.setLoanItem("Yes");
}

в зависимости от того, как вы хотите передать этот экземпляр.

0
ответ дан OrangeDog 17 August 2018 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: