POO instancié class héritée
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
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Classe globalManager
<?php
class manager {
protected $bdd;
public function __construct(PDO $bdd) {
$this->bdd = $bdd;
}
}
$ddb = DBconnexion::PDO();
$gManager = new manager($ddb);
?> |
Classe managerMember
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <?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
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?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é
Citation:
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.