我正在编写一个WordPress插件,目前正在管理端工作。我正在为这个项目使用类。我遇到的麻烦可能源于我的经验不足。
我有两个类,一个用于管理页面,另一个用于处理自定义数据库表创建,删除,查询等。
我认为为了执行多个数据库操作,在调用 tools_page 方法时创建表对象( $ db )是有意义的。这反映在下面的代码中。但是,调用 $ db-> create_update_tables()会抱怨找不到 $ db 。
如果我将 $ db 的创建移动到 db_tables 方法,则代码会运行。
我认为由于涉及的方法是公共的,因此$ db对象应该可用于管理页面内的其他方法。我的研究印象中,首选的方法是声明一个全局 $ wpdb ,以便在插件运行时与所有数据库调用一起使用。如果我不正确,那么正确的做法是什么?
管理员类:
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)
如果需要表类的唯一方法是db_tables()
,那么就可以像你说的那样做。将$db
的创建移至db_tables
方法。
但是如果您需要所有方法都可以访问创建,则需要在$wpbd
类下声明变量,例如Home_Search_Tables
,这样您就可以从方法中传递它。
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