提问者:小点点

在php的子类中使用时,父方法返回空


我有一个父类(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()相同的结果。


共1个答案

匿名用户

您需要使用父类中的方法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是独立的对象。你需要像我上面说的那样去做