POO instancié class héritée

Fermé
markaz Messages postés 331 Date d'inscription mercredi 18 avril 2007 Statut Membre Dernière intervention 16 septembre 2015 - 23 déc. 2013 à 09:31
theshadoo Messages postés 786 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 3 mai 2016 - 23 déc. 2013 à 22:01
Bonjour, j'apprend nouvellement la POO et j'utilise PDO pour la connexion, affichage des info de ma BDD.

J'ai 3 classes:
- une pour la connexion à la BDD,
- une qui contient les méthodes d'ordre générale (affichage, etc..)
- et une pour gérer les méthodes spécifiques telle que les membres (connexion, ajout, modification, etc...) qui extends de la class des méthodes générales

Mon problème c'est comment appeler une méthode de la class "méthodes générales" dans la class fille afin de bénéficier de ses méthodes.

Classe connexio BDD

<?php
class DBconnexion {

public static function PDO() {

try {
$bdd= new PDO('mysql:host=localhost;dbname=ajmci', 'root', '', array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}
catch(PDOException $e){
die('<h1>Impossible de se connecter a la base de donnees</h1>');
}

return $bdd;
}
}
?>

Code méthodes standards
Classe globalManager

<?php
class manager {

protected $bdd;


public function __construct(PDO $bdd) {
$this->bdd = $bdd;
}
}

$ddb = DBconnexion::PDO();
$gManager = new manager($ddb);

?>

Classe managerMember
<?php
session_start(); //On demarre la session

class memberManager extends manager {

public $table;
public $login;
protected $password;

//Fonction connexion membre
function logMember($table, $login, $password){

//execute login via function prepare pour prevenir les injection MySQL
$result = $this->bdd->prepare("SELECT * FROM ".$table." WHERE login ='".$login."' AND
motpass = '".$password."'");
$result->execute();
$data = $result->fetch(PDO::FETCH_OBJ);
$row = count($data);

if($row != 0){
if(($data->login == $login) && $data->motpass == $password){
$_SESSION['login'] = $data->login;
$_SESSION['profil'] = $data->profil;
return true;
}

}else{
return false;
}

}
}

$gManagerMember = new memberManager;
?>

Page traitement connexion membre
<?php
require('class/db.class.php');
require('class/manager.class.php');
require('class/memberManager.class.php');


if($_POST) {
$table = "administrateur";
$login = $_POST['login'];
$password = $_POST['motpasse'];

$connect = $gManagerMember->logMember($table, $login, $password);

if($connect == true){
echo 'Bon';
exit;
}
else {
echo "pas bon";
}
}
?>

Erreur affiché
Catchable fatal error: Argument 1 passed to manager::__construct() must be an instance of PDO, none given, called in D:\EasyPHP-12.1\www\ajmci_news\class\memberManager.class.php on line 33 and defined in D:\EasyPHP-12.1\www\ajmci_news\class\manager.class.php on line 14

NB: le principe pour moi c'est d'avoir une classe qui traite les méthodes standarts et une classe fille qui elle traite les méthodes spécifiques.

1 réponse

theshadoo Messages postés 786 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 3 mai 2016 123
23 déc. 2013 à 22:01
Va voir du côté des design pattern singleton (qui peut tout à fait être utilisé dans ce cas là) ou bien du design pattern factory ça te permettra d'entrevoir de nouvelles possibilités.

Et soit plus explicite sur tes class car là je ne vois pas quelle class tu appelles générales.
Mais va faire un tour sur google et regarde du côté des design patterns que je viens de te citer, comme je t'ai dis cela va t'ouvrir quelques perspectives sur ta conception.
0