__autoload классов. Грабли.

zarus

Хитрожопый макак
__autoload классов. Грабли.

При написании скриптов на локальной машинке использовались: Windows XP, Apache 1.3.x и PHP 5.1.2
На тестовом (продакшен) сервере: FreeBSD, Apache 1.3.x / Lighttpd (cgi) и PHP 5.1.4

Все классы подгружались через __autoload.

Проблема уже решена. Просто пишу здесь, вдруг кто с такой же сталкнется.
На локальном все работает. На тестовом апач падал, лайт выдавал сообщение о нехватке памяти.

Проблема была в классах, а точнее - в вызовах еще не объявленных классов.
Для примера:
PHP:
# test1.inc
class test1 {
   function __construct() {
     db::get()->query(...);
   }
   
   function someAction() {
   }
}
# db.inc
class db {
  ...
  function query(...) {
     ...
     test1::get()->someAction();
     ...
  }
}
# index.php
#class::get() - синглтон спертый из 5 PHP Design Patterns, про которые прочитал в PHP Inside,
# но данный факт к вышеописанной проблеме отношения не имеет.
test1::get()->someAction();
function __autoload( $className ) {
  if ( is_readable( $className . '.inc' ) {
    require_once( $className . '.inc' ) {
  }
}
Почему этот косяк глотался на локальном, и вылетал на тестовом?
Прошу дать комментарии по данному вопросу от более опытных и/или знающих. :) Спасибо за внимание.
 

slego

Новичок
1. Не совсем по теме, но советую тебе один раз и навсегда отказаться от расширений типа *.inc - почему, много раз обсасывалось на этом форуме, да и, в общем-то, можно и самому догадаться. Делай, хотя бы, *.inc.php.
2. Если честно, не очень понятен смысл проверки is_readable(...). Что это тебе реально дает? Ну, а если он не readable? Что тогда?
А тогда, по-идее fatal error должен быть. Только он возникнет и так, без всяких проверок, если пхп не сможет найти описание класса.

Имхо, вполне достаточно
PHP:
function __autoload( $className ) {
    require_once( $className . '.inc' );
}
 
Сверху