tengo 3 páginas uno para conectar a la DB

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

el 2 es

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

}

}

el 3 es

class ViewUser extends User{

public function ViewAllUser (){

    $datas = $this->getAllUser();

    foreach($datas as $data){
        //echo the db rows
        echo $data['uid']."</br>";
        echo $data['pas']."</br>";
    }

}

}

cuando trato de ejecutar en otra página

<?php
include 'Db.php';
include 'User.php';
include 'ViewUser.php';
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Oop</title>
</head>
<body>

     <?php
        $users = new ViewUser();
        $users->ViewAllUser();
     ?>

</body>
</html>

tengo un error no capturado ArgumentCountError: Muy pocos argumentos para la función Db::__construct(), 0, aprobada en /Users/mohamedelmasry/Documents/websites/oop/test.php en la línea 18 y exactamente 4 espera en /Usuarios/mohamedelmasry/Documentos/páginas web/programación orientada a objetos/Db.php:18 de seguimiento de la Pila: #0 /Users/mohamedelmasry/Documents/websites/oop/test.php(18): Db->__construct() #1 /Users/mohamedelmasry/.composer/vendor/laravel/valet/server.php(128): require(‘/Usuarios/mohamede…’) #2 {main} lanzado en /Usuarios/mohamedelmasr

  • he arreglado así. clase Db{ private $valor dbusername =»root»; private $dbName = «oop»; private $dbPas = «»; private $dbHost = «127.0.0.1»; protected function conectar(){ $this->valor dbusername = «root»; $this->dbName = «oop»; $this->dbPas = «»; $this->dbHost = «localhost»; $con = new PDO(«mysql:host=$this->dbHost;dbname=$this->dbName», $this->valor dbusername, $this->dbPas); return $con; } }

1 Comentario

  1. 2

    Su base al constructor de la clase espera 4 argumentos:

    class Db{
    
    ...
    
        public function __construct($dbUserName, $dbName, $dbPas, $dbHost)
        {
            ...
        }

    Por lo que no puede crear la clase hija sin parámetros.
    Usted necesita hacer:

    $users = new ViewUser('root', 'dbname', 'pass', 'host');

    O poner los valores predeterminados en el constructor de declaración:

    public function __construct($dbUserName='root', $dbName='db', $dbPas='pass', $dbHost='host')
    {
        ...
    }

    Pero en general, la herencia es mal aquí. Es mejor que tener un independiente Db clase para administrar base de datos y el uso como un componente dentro de sus otras clases (uso de la composición de lugar de la herencia).

Dejar respuesta

Please enter your comment!
Please enter your name here