php autoload: дублирование соединения db

Почему этот класс autoload дублирует соединение db?

 class autoloader { private $directory_name; public function __construct($directory_name) { $this->directory_name = $directory_name; } public function autoload($class_name) { $file_name = 'class_'.strtolower($class_name).'.php'; $file = AP_SITE.$this->directory_name.'/'.$file_name; if (file_exists($file) == false) { return false; } include ($file); } } # nullify any existing autoloads spl_autoload_register(null, false); # specify extensions that may be loaded spl_autoload_extensions('.php, .class.php, .lib.php'); # instantiate the autoloader object $classes_2 = new autoloader('classes'); # register the loader functions spl_autoload_register(array($classes_2, 'autoload')); $connection = new database_pdo(DSN,DB_USER,DB_PASS); var_dump($connection); 

результат,

 object(database_pdo)[2] protected 'connection' => object(PDO)[3] 

Класс соединения db находится в папке «классы»,

 class database_pdo { # database handler protected $connection = null; # make a connection public function __construct($dsn,$username,$password) { try { # MySQL with PDO_MYSQL $this->connection = new PDO($dsn, $username, $password); $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { # call the get_error function $this->get_error($e); } } ... # closes the database connection when object is destroyed public function __destruct() { # set the handler to NULL closes the connection propperly $this->connection = null; } } 

Как я могу исправить эту ошибку?

РЕДАКТИРОВАТЬ:

в результате это должно быть,

 object(database_pdo)[1] protected 'connection' => object(PDO)[2] 

Я получаю только результат, если я не использую класс autoloader , поэтому я думаю, что в коде класса autoloader должно быть что-то, что я сделал неправильно.

Но я не знаю, какая строка ошибочна …

РЕДАКТИРОВАТЬ:

Если я использую print_r ,

 print_r($connection); 

Результат,

 Object ( [connection:protected] => PDO Object ( ) ) 

РЕДАКТИРОВАТЬ:

Я получаю еще больше «дубликатов», если я использую этот класс автозагрузки кем-то другим,

object (database_pdo) [11] protected 'connection' => object (PDO) [13]

РЕДАКТИРОВАТЬ:

 function __autoload($class_name) { include AP_SITE."classes_1/class_".$class_name.".php"; } $connection = new database_pdo(DSN,DB_USER,DB_PASS); var_dump($connection); 

результат,

 object(database_pdo)[1] protected 'connection' => object(PDO)[2] 

но я получу ошибку, если захочу загрузить классы из других каталогов,

 function __autoload($class_name) { include AP_SITE."classes_1/class_".$class_name.".php"; include AP_SITE."classes_2/class_".$class_name.".php"; } 

сообщение,

Предупреждение: include (C: /wamp/www/art_on_your_doorstep_2011_MVC/global/applications/CART/classes_2/class_database_pdo.php) [function.include]: не удалось открыть поток: нет такого файла или каталога в …

который ссылается на эту строку – include AP_SITE."classes_2/class_".$class_name.".php";

РЕДАКТИРОВАТЬ:

Этот работает так, как я ожидаю,

 function system_autoload($class) { // $class = str_replace('_', '/', strtolower($class.'.php')); if(file_exists(AP_SITE.'classes_1/class_'.$class.'.php')) { include_once(AP_SITE.'classes_1/class_'.$class.'.php'); } else if(file_exists(AP_SITE.'classes_2/class_'.$class.'.php')) { include_once(AP_SITE.'classes_2/class_'.$class.'.php'); } } spl_autoload_register('system_autoload'); 

Но он не является общим вообще, поскольку я дублирую код внутри, когда у меня есть более 2 каталогов.

Предполагаю, что эти числа являются идентификаторами объектов. Это порядковые номера, присваиваемые объектам PHP по мере их создания.

В вашем коде объект # 1 – ваш автозагрузчик, # 2 – ваш класс database_pdo а # 3 – PDO .