我有3页用于连接数据库
class Db{
private $dbUserName ="root";
private $dbName = "oop";
private $dbPas = "";
private $dbHost = "127.0.01";
public function __construct($dbUserName, $dbName, $dbPas, $dbHost)
{
$this->dbUserName = $dbUserName;
$this->dbName = $dbName;
$this->dbPas = $dbPas;
$this->dbHost = $dbHost;
$con = new PDO("mysql:host= $dbHost; $dbUserName,$dbName,$dbPas");
return $con ;
}
2是
class User extends Db{
protected function getAllUser(){
$sql = "SELECT * FROM user";
$result = $this->connect()->query($sql);
$count = $result->rowCount();
// check if there'r date in the db
if($count > 0){
while($row = $result->fetchAll() ){
$data[] = $row;
}
return $data;
}
}
}
3是
class ViewUser extends User{
public function ViewAllUser (){
$datas = $this->getAllUser();
foreach($datas as $data){
//echo the db rows
echo $data['uid']."";
echo $data['pas']."";
}
}
}
当我尝试在其他页面上运行它们时
include 'Db.php';
include 'User.php';
include 'ViewUser.php';
?>
Oop$users = new ViewUser();
$users->ViewAllUser();
?>
我得到一个错误Uncaught ArgumentCountError:函数Db :: __ construct()的参数太少,在第18行的/Users/mohamedelmasry/Documents/websites/oop/test.php中传递0,在/ Users / mohamedelmasry / Documents中预期传递4个/websites/oop/Db.php:18堆栈追踪:#0 /Users/mohamedelmasry/Documents/websites/oop/test.php(18):Db-> __ construct()#1 /Users/mohamedelmasry/.composer/ vendor / laravel / valet / server.php(128):require(‘/ Users / mohamede …’)#Users {mo}抛入/ Users / mohamedelmasr
解决方法:
您的基类构造函数需要4个参数:
class Db{
...
public function __construct($dbUserName, $dbName, $dbPas, $dbHost)
{
...
}
因此,您无法在没有参数的情况下创建子类.
你需要做:
$users = new ViewUser('root', 'dbname', 'pass', 'host');
或者将默认值放入构造函数声明中:
public function __construct($dbUserName='root', $dbName='db', $dbPas='pass', $dbHost='host')
{
...
}
但总的来说,继承在这里被滥用了.您最好有一个单独的Db类来管理DB并将其用作其他类中的组件(使用组合而不是继承).
标签:php,oop
来源: https://codeday.me/bug/20190928/1825770.html