在PHP中覆盖父类的父类构造函数

10

我有一个PHP类,如下:

class DB extends mysqli{
    public function __construct(
      {
       parent::__construct('localhost','user','password','db');
      }
}

我的问题是,我想用一个执行更高权限数据库操作的不同数据库用户的新类来覆盖这个类。

class adminDB extends DB{
    public function __construct(
      {
       ??
      }
    }
}

在这里我应该做什么?


1
在构造函数中设置特定的数据库凭据通常是一个不好的主意。如果你真的需要将数据库凭据硬编码到一个类中,你应该创建一个工厂方法,比如静态函数 create() { return new self('localhost',...); }。 - amik
2个回答

12

你应该无论如何将凭证传递给构造函数:

class DB extends mysqli {
    public function __construct($host, $user, $password, $db)
    {
        parent::__construct($host, $user, $password, $db);
    }
}

那么您不需要继承,只需使用:

$adminDb = new DB($adminHost, $adminUser, $adminPassword, $db);
$nonAdminDb = new DB($host, $user, $password, $db);

但是如果你真的想要继承,你仍然可以这样做:

class AdminDB extends DB {
    public function __construct() {
        parent::__construct('adminhost','adminuser','adminpassword','db');
    }
}

0
<?php
    class mohona{
        public $name;
        public $age;
        public $fname;
        public $lname;
        public function __construct($cname,$cage,$cfname,$clname){
            $this->name=$cname;
            $this->age=$cage;
            $this->fname=$cfname;
            $this->lname=$clname;


        }
        public function getMohona(){
            echo "Full Name: ".$this->fname." ".$this->lname." ".$this->name."<br/>Age: ".$this->age."<br/>";
        }
    }
    class ibrahim extends mohona{
        public $relational_status;
        public $relation;
        public $contact;
        public function __construct($cname,$cage,$cfname,$clname,$crelational_status,$crelation,$ccontact){
            parent::__construct($cname,$cage,$cfname,$clname);
            $this->relational_status=$crelational_status;
            $this->relation=$crelation;
            $this->contact=$ccontact;
        }
        public function getIbrahim(){
            echo "Full Name: ".$this->fname." ".$this->lname." ".$this->name."<br/>Age: ".$this->age."<br/>"."Relational Status: ".$this->relational_status."<br/>Maritual Status: ".$this->relation."<br/>Contact Status: ".$this->contact;
        }
    }
    $oMohona=new mohona("Mohona","20","Nafis","Anjum");
    $oIbrahim=new ibrahim("Ibu","25","Ibrahim","Akbar","Single","Unmarried","blocked");
    echo $oMohona->getMohona();
    echo $oIbrahim->getIbrahim();
?>

5
你应该真正解释一下为什么这个方案能够解决手头的问题。 - Nathaniel Ford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接