2017-11-18 87 views
0

我正在寫一個WordPress插件,目前在管理端工作。我爲這個項目使用了類。我遇到的麻煩可能源於我的經驗不足。如何在PHP中正確構造並調用不同的類方法的類方法?

我有兩個班,一個是管理頁面,另一個處理自定義數據庫表的創建,刪除,查詢等

我認爲,爲了做一些數據庫操作,它將使意義在tools_page方法被調用時創建表對象($ db)。這反映在下面的代碼中。但是,致電$ db-> create_update_tables()抱怨找不到$ db

如果我將$ db的創建移動到db_tables方法,代碼將運行。

我認爲,由於涉及的方法是公共的,$ db對象應該可用於管理頁面內的其他方法。我在研究的印象之下,首選的方法是在插件運行時聲明全局數據庫調用時使用的全局單一全局數據庫。如果我不正確,那麼做到這一點的正確方法是什麼?

管理類:

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

什麼警告/錯誤,你得到這個? (錯誤+日誌)。由於我們沒有看到整個聲明代碼,所以使用部分代碼可以很好地知道輸出日誌 –

+0

顯示代碼。當你不顯示實際實現 – TurtleTread

+0

@ Elvin85錯誤(PHP)是$ db對象沒有被定義的時候,所有這些解釋都不是很有幫助。我試圖在上面更好地解釋它。謝謝你的幫助。抱歉,我很慢回到你們身邊。我整天都在場外。 –

回答

0

如果所需要的表類的唯一方法是你db_tables(),你可以做你說什麼。將$db的創建移動到db_tables方法。

但是,如果您需要創建所有方法都可以訪問,則需要在類Home_Search_Tables下聲明類似$wpbd的變量,以便您可以從方法傳遞它。

class Home_Search_Admin { 

private $db; // Declare $db 

在你的方法,使用$this->db

public function db_tables() { 

    echo "Inside db_tables"; 
    $this->db->create_update_tables(); // $this->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! –

相關問題