#php #laravel
#php #ларавель #laravel
Вопрос:
У меня есть код на моей Модели:
protected static function boot() {
parent::boot();
if($this->status == 1) {
static::updated(function () {
//do something
}
}
}
Мне нужно проверить, соответствует ли статус текущей записи == 1, затем сделать static::updated()
.
Теперь я получаю сообщение об ошибке: $это не может быть в статической функции.
Как я могу проверить состояние при загрузке защищенной статической функции?
Комментарии:
1. Это невозможно, потому что статические функции независимы от любого созданного объекта.
2. Вам действительно нужно, чтобы это было статично?
3. Статические функции не могут распознать $this, поскольку это созданный объект, как сказал @Daan. Все, что вы можете попробовать, это либо получить его в параметре, либо попытаться вернуть его из какой-либо функции родительской. итак, в вашей статической функции вы можете получить это как
$status = parent::SomeFunctionThatReturnsStatus();
, а затем вы можете использовать $status в своемif
состоянии4. Также не могли бы вы, пожалуйста, рассказать, зачем вам нужно сделать это статической функцией?
Ответ №1:
Как и Daan, упомянутый в комментариях, это невозможно, однако вы могли бы решить это другим способом:
protected static function boot() {
parent::boot();
static::updated(function ($model) {
if ($model->status == 1) {
//do something
}
});
}
Комментарии:
1. Я уже упоминал, что нужно использовать какую-то другую функцию, чтобы получить переменную $status в качестве параметра функции, а затем использовать ее в этой статической функции.
Ответ №2:
1) Использование $this
Вы должны заменить $this
на self::
, чтобы ссылаться на переменную ( $status
), содержащуюся в статическом классе:
protected static function boot() {
parent::boot();
if(self::$_status == 1) {
static::updated(function () {
//do something
}); //also close off your method call correctly.
}
}
2) Проверьте, соответствует ли статус текущей записи = 1
Мне нужно проверить, соответствует ли статус текущей записи == 1, затем выполните static::updated().
Где значение $status
установлено / сохранено / доступно? Код, который вы показываете, показывает, что $status
задан в самом классе, но как статический класс это будет, э-э, статично.
Возможно, вам потребуется остановить статический класс / метод или передать данные в функцию следующим образом:
protected static function boot($status = null) {
parent::boot();
if($status == 1) {
static::updated(function () {
//do something
}); // close off your method properly.
}
}
Комментарии:
1. Второй случай, о котором вы упомянули, — это то, о чем я уже говорил @Dronax, то есть получить переменную $status в качестве параметра функции. :}
2. @Dronax да, но как PHP получает эту информацию?