Bonjour a tous, aprés recherche sur le forum j'ai pus trouvé le mémes probléme, mais le sujet et fermer et n'a pas abouti a une réponse :
http://www.grafikart.fr/forum/topics/17768

J'ai le méme soucis, pourtant j'ai tous essayé mais je pense que je doit avoir fait une erreur quelque part,

Database.php :

namespace MineCrown;

    class Database{

        private $db_host = 'localhost';
        private $db_name = 'tuto';
        private $db_user = 'root';
        private $db_pass = '';

        private $pdo;

        public function __construct(){
            try{
                $this->pdo = new PDO("mysql:host=$this->db_host;dbname=$this->db_name", $this->db_user, $this->db_pass);
                $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
                $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
            }catch(Exception $e){
                echo '<p><center>Une erreur est survenue lors de la connexion a la basse de données</center></p>';
                die();
            }
        }
}

Autoloader.php :

namespace MineCrown;

    class Autoloader{

        static function register(){
            spl_autoload_register(array(__CLASS__,'autoload'));
        }

        static function autoload($class){
            if(strpos($class, __NAMESPACE__ .'\\') === 0){
                var_dump($class);
                $class = str_replace('MineCrown\\','',$class);
                require 'class/'.$class.'.php';
            }
        }

    }

Index.php :

define("WEBROOT","/dev.minecrown.loc/");

    require 'class/Autoloader.php';
    \MineCrown\Autoloader::register();
    require 'class/Instances.php';

    if(!isset($_GET['p'])){ $_GET['p'] = 'index'; }
    if(!file_exists('pages/'.$_GET['p'].'.php')){  $_GET['p'] = '404'; }

    if(preg_match("#^[a-zA-Z0-9/-]+$#", $_GET['p'] )){
       ob_start();
       include 'pages/'.$_GET['p'].'.php';
       $content = ob_get_contents();
       ob_end_clean();
    }

    include 'templates/default.php';

Et la page instances.php :

<?php

    namespace MineCrown;

    $validated        = new validated($_POST);
    $session          = new Session();
    $db               = new Database();
    $authentification = new Authentification();

?>

Je viens vers vous parce que cela fait un moment que je cherche la solution mais rien de fonctionne :/ Merci d'avance a tous de votre aide et bonne journée :)

3 réponses


mxmaxime
Réponse acceptée

Salut,
comme l'a dit @connected ton problème vient de là.
Puisque tu es dans le namespace MineCrown lorsque tu fais new PDO il cherche dans MineCrown\PDO la classe ;)
C'est pareil pour toutes les autres classes que tu essaies d'instancier, c'est pour ça qu'on mets souvent en haut (c'est une des raisons..)

use namespace\delaclass

Là tu peux utiliser :

new \PDO

ou alors tout en haut de ton fichier :

namespace MineCrown;
use \PDO;

Bonjour,

dans ta classe Database, rajoute un antislash devant PDO :

new \PDO(...)

Ca devrait le faire :)
Bonne journée.

DylanVsn
Auteur

J'essayé directement de le mettre sur le new \pdo mais ca ne marché pas et juste en ajoutant ce use tous fonctionne super :) Un grand merci a toi