2017-11-18 4 views
0

私はWordPressプラグインを作成しています。現在、管理者側で作業しています。このプロジェクトではクラスを使用しています。私が遭遇した問題は、おそらく私の未熟さに由来しています。PHPのクラスメソッドからクラスメソッドを正しく構築して呼び出すにはどうすればよいですか?

は、私は2つのクラス、管理者ページに1つ、とを持って、私はいくつかのデータベース操作を行うためには、それが意味をなすだろうと思っ

などのカスタムデータベーステーブルの作成、削除、クエリを処理するために、他のtools_pageメソッドが呼び出されたときにテーブルオブジェクト($ db)を作成します。これは以下のコードに反映されています。ただし、$ db-> create_update_tables()コールは$ dbが見つかりません。

$ dbの作成をdb_tablesメソッドに移動すると、コードが実行されます。

私は、関連するメソッドが公開されているので、$ dbオブジェクトは管理ページ内の他のメソッドで使用できるはずだと思いました。私は自分の研究の印象の下に、プラグインの実行中にすべてのデータベース呼び出しで使用するために単一のグローバル$ wpdbを宣言することを推奨しました。私が正しくない場合、これを行う正しい方法は何ですか?

adminクラス:テーブル用

class Home_Search_Admin { 

    public function __construct($plugin_name, $version, $db_version) { 

     $this->plugin_name = $plugin_name; 
     $this->version = $version; 
     $this->db_version = $db_version; 

    } 

    public function db_tables() { 

     echo "Inside db_tables"; 
     $db->create_update_tables(); 
     wp_die(); 
    } 

    public function tools_page() { 

     include(plugin_dir_path(__FILE__) . 'partials/home-search-admin-display.php'); 
     $db = new Home_Search_Tables(); 
     $this->db_tables(); 
    } 
} 

クラス:

class Home_Search_Tables { 

    private $wpdb; 

    public function __construct() { 

     global $wpdb; 
     $this->wpdb = $wpdb; 
     print_r("Constructed!"); 

    } 

    public function create_update_tables() { 

     print_r('I am in the method!'); 

    } 
} 
+0

$this->db

public function db_tables() { echo "Inside db_tables"; $this->db->create_update_tables(); // $this->db 

同じでしょうか? (エラー+ログ)。 partを使って宣言のコード全体を見ることができないので、出力ログ –

+0

を表示することをお勧めします。あなたが実際の実装を表示していないときに説明することはそれほど有用ではありません – TurtleTread

+0

@ Elvin85エラー(PHP)は、$ dbオブジェクトが定義されていないということです。私は上でそれをよりよく説明しようとしました。ご協力いただきありがとうございます。申し訳ありませんが、私はあなたに戻って遅いでした。私は終日サイト外だった。 –

答えて

0

テーブルクラスを必要とする唯一の方法である場合は、あなたのdb_tables()、あなたが言ったとして行うことができます。 $dbの作成をdb_tablesメソッドに移動します。

しかし、すべてのメソッドからアクセスできるようにするには、$wpbdのような変数をHome_Search_Tablesクラスの下に宣言する必要があります。メソッドから渡すことができます。あなたの方法で

class Home_Search_Admin { 

private $db; // Declare $db 

、ここであなたはこのためですか何の警告/エラー

public function tools_page() { 

    include(plugin_dir_path(__FILE__) . 'partials/home-search-admin-display.php'); 
    $this->db = new Home_Search_Tables(); // $this->db 
    // Or you can move this creation to construct method if necessary 
+0

これを上記の@TurtleTreadのコメントと組み合わせると、私の思考の単純なエラーが表示されました:$ dbを宣言する必要があることを忘れてしまいました! –

関連する問題