PHP - Как решить ошибку уведомления о сообщении «используя $ this, когда не в контексте объекта»? - PullRequest
0 голосов
/ 09 января 2020

Здравствуйте, у меня возникла проблема с уведомлением об отправке сообщения в PHP PDO. Ниже приведен мой код для addMention sendNotification, если кто-то упомянул пользователя в своем сообщении.

public function addMention($status,$user_id, $tweet_id){
    preg_match_all("/@+([a-zA-Z0-9_]+)/i", $status, $matches);
    if($matches){
        $result = array_values($matches[1]);
    }

    $sql = "SELECT * FROM users WHERE username = :mention";

    foreach ($result as $trend) {
        if($stmt = $this->pdo->prepare($sql)){
            $stmt->execute(array(':mention' => $trend));
            $data = $stmt->fetch(PDO::FETCH_OBJ);
        }
    }
    if($data->user_id != $user_id){
        Message::sendNotification($data->user_id, $user_id, $tweet_id, 'mention');
    }
}

И ниже мой sendNotication функция

public function sendNotification($get_id, $user_id, $target, $type){
        $this->create('notification', array('notificationFor' => $get_id, 'notificationFrom' => $user_id, 'target' => $target, 'type' => $type, 'time' => date('Y-m-d H:i:s')));

Ответы [ 2 ]

0 голосов
/ 09 января 2020

$this не существует вне объектов экземпляра класса, вы показываете function, но не окружающий класс, в своих примерах кода. Должно быть, вы вызываете его извне контекста объекта.

?php

class Notification extends SomeClassWithACreateMethod
{
    public function sendNotification($get_id, $user_id, $target, $type){
        $this->create('notification', array('notificationFor' => $get_id, 
        'notificationFrom' => $user_id, 'target' => $target, 'type' => $type, 'time' => date('Y-m-d H:i:s')));
}

Попробуйте что-то еще подобное ... имейте в виду, что метод ->create(), который вы вызываете, должен быть частью этого Notification класс тоже.

0 голосов
/ 09 января 2020

Вам нужно создать объект Message, чтобы вы могли вызывать его метод sendNotification.

$msg = new Message()
$msg->sendNotification($data->user_id, $user_id, $tweet_id, 'mention');

Способ, которым вы вызываете его, подходит только для метода stati c, который не может использовать $this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...