我指的当然这里的goofiness是像表前缀,又名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; }
}
然后顶上以相似的口吻你的插件代码(的functions.php)设置一个global到wpdb。
global $sanedb;
$sanedb = new SaneDb($wpdb);
从那里,只是用$sanedb你的插件,而不是$wpdb内。
最后,查看数据库名称等。
$sanedb->getDbName();