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 :)
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.
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