|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
Рассмотрим две ситуации: 1 . Веб-сервер развёрнут в ОС семейства Windows 2 . Веб-сервер развёрнут на виртуальной машине с ОС Debian , но файлы проекта Debian монтирует как сетевую файловую систему smb из хост-машины с ОС Windows (т.е. файлы физически расположены на хост-машине Windows, а гостевая машина Debian работает с ними как с локальными) В обоих этих ситуациях файловые функции и директивы file_exists , include и пр. будут выполняться в регистронезависимом режиме. Здесь всё понятно. Не понятно, почему и функция class_exists("class", false) тоже работает в регистронезависимом режиме ? Бред какой-то. Ведь эта функция (если 2-й параметр равен false ) файлы не читает, а проверяет, загружен/интерпетирован ли указанный класс в оперативной памяти. А в оперативной памяти имя класса одно. Со вполне определённым регистром. И если этой функции передать имя класса с некорректным регистром, она должна вернуть false , а возвращает true . Не вижу логики... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 20:46 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
Тьфу, в заголовке "php 6" указал. Имел ввиду " php 5.6 ". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 20:48 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
авторВедь эта функция (если 2-й параметр равен false) файлы не читает, а проверяет, загружен/интерпетирован ли указанный класс в оперативной памяти. А в оперативной памяти имя класса одно. Со вполне определённым регистром.А именно то, которое указано в подключенном файле ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 20:50 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
Нет там никакой регистрозависимости. Код: php 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 21:08 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
авторНет там никакой регистрозависимостиА должна быть ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 21:15 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
А где об этом написано в документации? С именами функций, кстати, такая же ситуевина. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 21:18 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
авторА где об этом написано в документации?В документации многих нюансов не пишут. Логически должны быть регистрозависимыми, как имена файлов, сравнение строк и пр. Сегодня полдня потратил из-за того, что в двух классах точки останова не работали. Как оказалось, эти файлы подключались с неверным регистром. При этом подключались без ошибок и предупреждений - для php/xdebug это были другие файлы, а не те, в которых фактически устанавливались точки останова... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 22:18 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
Да ну как сказать... Вижу только один способ - не уповать на регистр имен файлов и, давая имена, представлять, что "на винде должно работать". В никсах имеется зависимость от регистра. В винде имена файлов регистронезависимы, да ещё и символ ":" запрещен. И ничего, живут как-то, пользуясь одной и той же ФС на сервере. Без разницы, на каком, кстати. :) Сравнение же строк в контексте регистрозависимости - штука управляемая обычно. Разные надобности возникают, а потому и разные функции используются или ключи в регулярках. К вопросу о нюансах. Про регистрозависимость имен переменных, например, буквально в первой строчке написано http://php.net/manual/ru/language.variables.basics.php Про имена констант - тоже http://php.net/manual/ru/language.constants.php Имена файлов к этим нюансам языка программирования вообще никакого отношения не имеют. Ими файловая система занимается, а не пхп. А вот почему разработчики применили разный подход к именам функций/классов и переменных/констант - вот эту вот логики совсем не понятно. На мой взгляд, лучше б одинаково было. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 01:44 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
vkleА где об этом написано в документации? С именами функций, кстати, такая же ситуевина.Про функции то написано Note: Function names are case-insensitive, though it is usually good form to call functions as they appear in their declaration. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 09:55 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
авторДа ну как сказать... Вижу только один способ - не уповать на регистр имен файлов и, давая имена, представлять, что "на винде должно работать".авторА вот почему разработчики применили разный подход к именам функций/классов и переменных/констант - вот эту вот логики совсем не понятно. На мой взгляд, лучше б одинаково было. В IDE у меня в настройках задано слежение за корректностью регистра при написании имён классов и функций/методов. Но классы у меня подключаются через автозагрузчик, а имена необходимых классов формируются другим методом - здесь и была неприметная ошибка с регистром. Если бы имена классов были регистрозависимыми, то класс с некорректным регистром так же бы успешно подключался, но при первом явном использовании класса с корректным регистром (например, вызов статики) была бы сгенерирована ошибка . Правда, при отсутствии в коде явного упоминания класса ошибка по-прежнему осталась бы незамеченной. Сейчас в автозагрузчике классов после успешного подключения файла добавил проверку: Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 14:30 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
http://php.net/manual/ru/function.class-exists.php Список параметров ¶ class_name Имя класса. Воспринимается без учета регистра. autoload Вызывать ли по умолчанию __autoload. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2017, 18:44 |
|
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
|
|||
---|---|---|---|
#18+
авторИмя класса. Воспринимается без учета регистра.Да. В справке указано. Только никто внимания не обратил. Но в любом случае это не особенность работы конкретной функции, а общая особенность работы php с классами (как показал vkle ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2017, 23:31 |
|
|
start [/forum/topic.php?fid=23&fpage=29&tid=1460494]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 278ms |
total: | 410ms |
0 / 0 |