file_exists не чувствителен к регистру
в результате и функция file_exists не чувствительна к регистру
я проверяю с помощью этой функции установлен ли у меня компонент
имя файла компонента имеет вид class.ComponentName.php
в файле класс с именем ComponentName
пример проверки
$classname = "class.".$ComponentName.".php";
if (file_exists(ROOT.$path.$classname)){
include_once(ROOT.$path.$classname);
$component = $ComponentName;
}
тут по большей части проблем нет так как php тоже не чувствителен к регистру имен классов и функций
но боюсь, что где-нибудь из-за этого может возникнуть баг
единственное что мне приходит в голову как решение этой проблемы
так это просканить директорию и получить список всех установленных компонентов,
и ориентируясь на этот список уже подгружать компоненты
но это получается жуткая заморочка и мне так делать не хочется
хороший ответ :D
но вопрос в том
как мне сделать, так что бы загрузчик компонентов был чувствителен к регистру?
если не делать, так как я предложил то как
собственно вспомнил пример бага который может возникнуть
$ComponentName = "TeSt"
// ...
// загруска компонента упешно отработает
$classname = "class.".$ComponentName.".php";
if (file_exists(ROOT.$path.$classname)){
include_once(ROOT.$path.$classname);
$SuperClass->$component = $ComponentName;
}
// ...
// тут будет ошибка Notice объект не найден и метод вызван не будет
// так как методы классов в пыхе чувствительны к регистру
$SuperClass->test->run();
так как всегда передавал правильные имена компонентов
или на стадии его использования имел доступ к имени, под которым он был загружен
в одном из загрузчиков я добавил к параметрам переменную $usename имя, под которым этот компонент будет использоваться
но сейчас столкнулся с ситуацией, что имя компонента, под которым он будет вызван, формируется на верхнем уровне и может быть недоступно на уровне использования
приведение, вызываемое имя к нижнему регистру влечет за собой определенные неудобства, так как имя компонента может состоять из одного и более слов то обращаться к компоненту по имени sumelementtorunerconsole не слишком удобно
в принципе проблему можно решить за счет $usename, но эта переменная тоже формируется на верхнем уровне
PS может, я и зря так дергаюсь, но просто как-то дернуло обнаружение этого бага в моей системе
http://ru.php.net/manual/en/function.file-exists.php#74159
боюсь этот комент не по теме
самый близкий это вот этот пост и то только после небольшой модернизации
return (PHP_OS=="WIN32") || (PHP_OS=="WINNT") || (PHP_OS=="Windows");
}
function register_file_exists($filename){
if (!is_windoes()){
if (file_exists($filename)) return true;
}
$files = glob(dirname($filename) . "/*");
foreach($files as $file){
if ($file == $filename) return true;
}
return false;
}
Вообще мне казалось что это всем известно. Это вообще одна из тех проблем, с которыми сталкиваются только-только начинающие новички.
Я удивлен, что вы этого не знали. Интересно, сколько еще банальных фактов вам неизвестны...
PS и вообще мне непонятно зачем делать регистрозависимые имена? Хочется лишних проблем в разработке кода?
знать то я это знал и давно. дело в том что я всегда старалюс делать все правильно и потому я лишь сейчас столкнулся с такой реакция на это действие
я случайно задал компоненту неверное имя и он всеравно загрузился
согласен с тобой
есть такое понятие как стандарт оформления кода
раньше я использовал стандарт именования функций как в php (register_file_exists)
сейчас же я эксперементирую со стилем именования классов и функций примером которого будет JavaScript (registerFileExists)
От того как вы называете файл лучше работать он не станет. Полезнее сосредоточится на качестве и эффективности кода, чем парится по поводу прописных и строчных букв в названии файлов.
К тому же блок обработки исключений в вашем коде лишь утяжеляет (немного, конечно, но все же) проект, принося никому не нужные действия.