我有一个父类(DB
),它有一个名为con()
的公共方法
此方法应返回private$con
内的任何内容-它在类内部和外部都执行此操作。
class DB
{
private $con = array();
public function add($alias, $db, $un, $pw, $desc)
{
try {
$options = array(/*PDO OPTIONS*/)
$this->con[$alias] = array(
'alias' => $alias,
'db' => $db,
'dbh' => new PDO('mysql:host=localhost;dbname='.$db.';charset=utf8', $un, $pw, $options), 'desc'=>$desc);
} catch(PDOException $e) {
/* return error message */
}
}
public function con()
{
return $this->con;
}
}
我正在添加这样的连接:
$db = new DB();
$db->add('alias1','databasename','username','password','an optional short description');
$db->add('alias2','databasename2','username2','password2','');
现在,private$con
应该由两个连接填充—实际上是这样的
和con()
方法现在应该返回这些连接-它也会:
我在KD
-类中设置了此测试函数:
public function aliases()
{
foreach($this->con() as $con){ // this should returns an array with the aliases.
$aliases[] = $con['alias'];
}
return $aliases;
}
以下代码返回:数组(2){[0]=
<?=var_dump($db->aliases())?>
现在,我还创建了useAliases()
,作为扩展DB
类的子类中的测试方法:
class SQL extends DB
{
public function useAliases()
{
var_dump($this->aliases());
}
}
以下代码返回:NULL NULL
$sql = new SQL();
var_dump($sql->useAliases());
为什么会发生这种情况?我希望useAliases()
将返回与aliases()
相同的结果。
您需要使用父类中的方法add()
来设置您的连接。现在$con
属性的默认值是ray()
,因为您是这样定义它的:
private $con = array();
所以你得到了预期的结果。
如果你想让它工作,你需要这样运行:
$sql = new Sql();
$sql->add('alias','db','un','pw','desc');
$sql->showTables();
编辑
你不能这样做:
$db = new DB();
$db->add('alias1','databasename','username','password','an optional short description');
$db->add('alias2','databasename2','username2','password2','');
$sql = new Sql();
$sql->showTables();
因为在本例中,$db和$sql是独立的对象。你需要像我上面说的那样去做