2017-10-09 10 views
1

私はそれを理解しようとしています。別のクラスのクラスでパブリックメソッドを使用する方法を教えてください。このエラーが発生しましたPHP PDO他のクラスとは異なるクラスのパブリックメソッドを呼び出す

Fatal error: Uncaught Error: Using $this when not in object context 

私は、挿入メソッドを含むメインクラスのユーザーが、基本的にこのメソッドは、データベースに値を挿入します。ここ

<?php 
    class User{ 
    protected $pdo; 
    public function __construct($pdo){ 
     $this->pdo = $pdo; 
    } 

    public function insert($table, $fields){ 
     //here we insert the values into database 
    } 
    } 
?> 

は私が

<?php 
    session_start(); 
    include 'database/connection.php'; 
    include 'classes/user.php'; 
    include 'classes/follow.php'; 
    include 'classes/message.php'; 
    global $pdo; 

    $userObj  = new User($pdo); 
    $followObj = new Follow($pdo); 
    $messageObj = new Message($pdo); 
?> 

それらを使用することができ、私は他のクラスのメッセージを持っている、と続くので、クラスをインスタンス化するために、私のconfig.phpファイルです。フォロークラスで私は、ユーザークラスからすべてのメソッドにアクセスすることができ、およびメッセージクラスに私はこの方法を覚えて、sendNotificationをメソッドを使用しようとしているフォロークラスのユーザクラスで

<?php 
    class Message extends User{ 
     public function __construct($pdo){ 
      $this->pdo = $pdo; 
     } 

     public static function sendNotification($user_id, $followerID, $type){ 
      //calling this method from user class 
      $this->insert('notifications', array('By' => $user_id, 'To' => $followerID, 'type' => $type)); 
     } 
    } 
?> 

insertメソッドを使用しようとしていますメッセージクラスであり、そしてそれは私が何をすべき致命的なエラー

Fatal error: Uncaught Error: Using $this when not in object context 

を取得するユーザークラス

<?php 
    class Follow extends User{ 
     public function __construct($pdo){ 
      $this->pdo = $pdo; 
     } 

     public function follow($user_id, $followerID){ 
      //here will be query to insert follow in database 

      //now i need to sendNotification method from user 
      Message::sendNotification($user_id, $followerID, 'follow'); 

     } 
    } 
?> 

からメソッドを使うのか?

+1

あなたは静的メソッド – Thielicious

+0

に '$ this'を使用することはできませんしたがって$thisは以下の機能では

を使用することができない理由は、これを行う、ありませんグローバルキーワードを使用します。それは悪い練習です – Akintunde007

+0

私は静的キーワードを削除したとしたら、私はどのようにフォロークラスのメソッドにアクセスできますか? – dinho

答えて

0

sendNotificationを静的でない関数にします。 staticキーワードを削除してください

メソッドがインスタンス化されたクラスに依存しない場合は、静的メソッドを使用してください。あなたはOOPの原則を使用しているので、代わりに

$message = new Message($this->pdo);//pass database connection 
$message->sendNotification();//pass the variables 
0

あなたは、この方法では、静的メソッドから$これにアクセスしようとしています

public static function sendNotification($user_id, $followerID, $type){ 
      //calling this method from user class 
      $this->insert('notifications', array('By' => $user_id, 'To' => $followerID, 'type' => $type)); 

あなたがsendNotificationを非静的作り、あなたがユーザーのパブリックメンバにアクセスできるようになるので、メッセージのインスタンスを作成することができます

+0

どのように?私はクラスにファイルを含めたくありません。 – dinho

+0

$ message =新しいメッセージ(); $ message-> sendNotification(...); クラスが既に含まれている場合は動作します。 psr-4オートローディングを見てもわかるように、 – tete0148

+0

私のconfig.phpファイルでは、クラスで$ pdo変数を渡しました。クラスをインスタンス化すると、エラーがスローされます。 – dinho

関連する問題