[Resolvido] Apanhando do namespace e autoload
<?php
namespace Util;
/*
* Essa função vai carregar as classes automaticamente
* é chamada pelo php5.3
*/
class AutoLoad {
function __autoload($class) {
#require_once($class); #não funciona
#require_once($class."php"); #não funciona
#spl_autoload($class); # não funciona
include_once (\str_replace('\\', '/', $class).'php'); #não funciona
}
}
?>
<?php
namespace Util;
#use Util\AutoLoad; não funciona
include_once 'AutoLoad.php';
class ConnectionManager extends \Util\AutoLoad {
static function connect() {
return new \PDO("mysql:host=localhost;dbname=test", "root", "", array());
}
static function disconnect($link = null) {
$link = null;
}
}
?>
/index.php/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
#use Util\ConnectionManager; #não funciona
include_once 'util/ConnectionManager.php';
/*essa é a linha 12*/$connection = \Util\ConnectionManager::connect();
$em = $connection->query("show tables");
$em->execute();
var_dump($em->fetchAll(PDO::FETCH_ASSOC));
\Util\ConnectionManager::disconnect($connection);
?>
</body>
</html>
Não sei onde está errado. Se é o namespace que não estou usando corretamente ou se é a função __autoload.
A estrutura das pastas é a seguinte:
meu_projeto/
util/
AutoLoad.php
ConnectionManager.php
index.php
Quando uso include_once, funciona. Mas isso já é esperado.
Quando não uso include_once, mas sim o use Util\ConnectionManager em index.php,por exemplo, o erro é esse:
Fatal error: Class 'Util\ConnectionManager' not found in caminho\para\o\projeto\meu_projeto\index.php on line 12
A versão que uso do php é 5.3.0
Discussão (7)
Carregando comentários...