Bonjour,

Voila je rencontre un petit problème avec mon code, je veux que ma class extends ma première malheuresement j'ai un message d'erreur quand je test. Mon IDE me notifie pourtant qu'il n'y a aucunne erreur. Voici le code de mes deux class

Mon script modelPDO.php

<?php
namespace model;

class modelPDO
{
    protected static $serveur = 'mysql:host=localhost';
    protected static $bdd = 'dbname=local_lepanier';
    protected static $user = 'root';
    protected static $mdp = '';
    protected static $monPdo;
    protected static $monPdoBack = null;

    public function __construct()
    {
        model::$monPdo = new PDO(model::$serveur . ';' . model::$bdd, model::$user, model::$mdp);
        model::$monPdo->query("SET CHARACTER SET utf8");
    }

    public function _destruct()
    {
        model::$monPdo = null;
    }

    public static function getPdo()
    {
        if (model::$monPdoBack == null) {
            model::$monPdoBack = new model();
        }
        return model::$monPdoBack;
    }
}

Mon script Panier.php

<?php
Namespace model;

class Panier extends modelPDO
{
    public function getAllProduit(){
        $req = 'Select * from produit';
        $rs = model::$monPdo->query($req);
        $ligne = $rs->fetchAll(PDO::FETCH_ASSOC);
        return $ligne;
    }

}

Le message d'erreur est 'Class 'model\modelPDO' not found in C:\Applications\wamp\www\infoMedia\model\Panier.php on line 5'.

Merci d'avance de vos réponse, quelque chose me passe surement sous le nez.

5 réponses


Tu as bien un système d'autoload pour charger tes classes ? (idéalement composer, ou un système maison au pire)

Un soucis à la fois, mais là, ta classe modelPDO a beaucoup de soucis de logique (et des soucis de syntaxe également).

Yo!
Ton modelPDO n'est pas chargé et ca malgré que tes deux fichiers soient dans le même namespace. Donc :

require_once 'modelPDO.php';

Le extends ne suffit pas a l'héritage ? Si je mets un require je perds l'interet de l'héritage non ?

Ce n'est pas parce que tu fais un extends que tu as inclus ton fichier, il faut le dire à PHP en plus.
Ton IDE lui, va chercher dans les fichiers les namespaces et noms de class, en supposant qu'un autoloader fera le boulot.
Il ne fera donc aucune erreur.

Donc soit tu inclus le fichier comme indiqué par houceni (pour commencer, ça peut être la solution), soit tu utilises un autoloader :

Doc php : http://php.net/manual/fr/language.oop5.autoload.php
Tuto composer grafikart : https://www.grafikart.fr/tutoriels/php/composer-480

Il est TRES fortement recommandé d'utiliser composer, mais c'est peut-etre plus compliqué à appréhender si tu débutes.

Merci à vous