【问题标题】:Override parent's parent's constructor in PHP在 PHP 中覆盖父级的父级构造函数
【发布时间】:2011-05-14 19:11:16
【问题描述】:

因此我有一个 PHP 类:

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

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

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

我应该在这里做什么?

【问题讨论】:

  • 在构造函数中设置特定的数据库凭据通常是个坏主意。如果您确实需要将数据库凭据硬连线到一个类中,则应该创建一个工厂方法,例如 static fn create() { return new self('localhost',...); }

标签: php constructor overriding


【解决方案1】:

无论如何,您都应该将凭据传递给构造函数:

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');
    }
}

【讨论】:

    【解决方案2】:
    <?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();
    ?>
    

    【讨论】:

    • 你应该真正解释一下为什么这可以解决手头的问题。
    猜你喜欢
    • 2010-12-06
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多