kea*_*tch 15
是的,它们的定义是 wp-config.php
它们是定义的.在Wordpress的根目录中看到wp-config.php
Wordpress 在其 OO 代码中存在一些相当愚蠢的东西,这不是我遇到的第一个,因为我们在Moxune的每个后续项目中更深入地挖掘内部结构。请参阅WP_User::__set does not persist custom fields as it Claims。
我在这里指的愚蠢之处当然是像表前缀之类的东西,又名wpdb::prefix是public成员变量,但是像dbname、dbpassword和dbhost之类的东西protected并且没有public访问器方法。
我确信 WordPress 核心开发人员之一会尝试为其争论一些基本原理,但同时也可能使用一些好的 'ol OO 来应对。我的建议是,装饰器。
class SaneDb
{
private $_oDb;
public function __construct(wpdb $oDb)
{
$this->_oDb = $oDb;
}
public function __get($sField)
{
if($sField != '_oDb')
return $this->_oDb->$sField;
}
public function __set($sField, $mValue)
{
if($sField != '_oDb')
$this->_oDb->$sField = $mValue;
}
public function __call($sMethod, array $aArgs)
{
return call_user_func_array(array($this->_oDb, $sMethod), $aArgs);
}
public function getDbName() { return $this->_oDb->dbname; }
public function getDbPass() { return $this->_oDb->dbpassword; }
public function getDbHost() { return $this->_oDb->dbhost; }
}
Run Code Online (Sandbox Code Playgroud)
然后在您的插件代码(functions.phpglobal )顶部以类似的方式设置wpdb.
global $sanedb;
$sanedb = new SaneDb($wpdb);
Run Code Online (Sandbox Code Playgroud)
从那里,只需$sanedb在您的插件中使用而不是$wpdb.
最后,获取数据库名称等。
$sanedb->getDbName();
Run Code Online (Sandbox Code Playgroud)