powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
12 сообщений из 12, страница 1 из 1
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531094
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассмотрим две ситуации:
1 . Веб-сервер развёрнут в ОС семейства Windows
2 . Веб-сервер развёрнут на виртуальной машине с ОС Debian , но файлы проекта Debian монтирует как сетевую файловую систему smb из хост-машины с ОС Windows (т.е. файлы физически расположены на хост-машине Windows, а гостевая машина Debian работает с ними как с локальными)

В обоих этих ситуациях файловые функции и директивы file_exists , include и пр. будут выполняться в регистронезависимом режиме. Здесь всё понятно.

Не понятно, почему и функция class_exists("class", false) тоже работает в регистронезависимом режиме ? Бред какой-то. Ведь эта функция (если 2-й параметр равен false ) файлы не читает, а проверяет, загружен/интерпетирован ли указанный класс в оперативной памяти. А в оперативной памяти имя класса одно. Со вполне определённым регистром. И если этой функции передать имя класса с некорректным регистром, она должна вернуть false , а возвращает true . Не вижу логики...
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531097
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, в заголовке "php 6" указал. Имел ввиду " php 5.6 ".
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531098
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВедь эта функция (если 2-й параметр равен false) файлы не читает, а проверяет, загружен/интерпетирован ли указанный класс в оперативной памяти. А в оперативной памяти имя класса одно. Со вполне определённым регистром.А именно то, которое указано в подключенном файле
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531103
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет там никакой регистрозависимости.
Код: php
1.
2.
$ php -r 'class a {} class A {}'
PHP Fatal error:  Cannot redeclare class A in Command line code on line 1
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531109
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНет там никакой регистрозависимостиА должна быть
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531112
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где об этом написано в документации?
С именами функций, кстати, такая же ситуевина.
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531157
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА где об этом написано в документации?В документации многих нюансов не пишут. Логически должны быть регистрозависимыми, как имена файлов, сравнение строк и пр.
Сегодня полдня потратил из-за того, что в двух классах точки останова не работали. Как оказалось, эти файлы подключались с неверным регистром. При этом подключались без ошибок и предупреждений - для php/xdebug это были другие файлы, а не те, в которых фактически устанавливались точки останова...
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531185
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну как сказать... Вижу только один способ - не уповать на регистр имен файлов и, давая имена, представлять, что "на винде должно работать". В никсах имеется зависимость от регистра. В винде имена файлов регистронезависимы, да ещё и символ ":" запрещен. И ничего, живут как-то, пользуясь одной и той же ФС на сервере. Без разницы, на каком, кстати. :)

Сравнение же строк в контексте регистрозависимости - штука управляемая обычно. Разные надобности возникают, а потому и разные функции используются или ключи в регулярках.

К вопросу о нюансах. Про регистрозависимость имен переменных, например, буквально в первой строчке написано http://php.net/manual/ru/language.variables.basics.php
Про имена констант - тоже http://php.net/manual/ru/language.constants.php

Имена файлов к этим нюансам языка программирования вообще никакого отношения не имеют. Ими файловая система занимается, а не пхп.

А вот почему разработчики применили разный подход к именам функций/классов и переменных/констант - вот эту вот логики совсем не понятно. На мой взгляд, лучше б одинаково было.
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531246
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleА где об этом написано в документации?
С именами функций, кстати, такая же ситуевина.Про функции то написано Note: Function names are case-insensitive, though it is usually good form to call functions as they appear in their declaration.
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39531501
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДа ну как сказать... Вижу только один способ - не уповать на регистр имен файлов и, давая имена, представлять, что "на винде должно работать".авторА вот почему разработчики применили разный подход к именам функций/классов и переменных/констант - вот эту вот логики совсем не понятно. На мой взгляд, лучше б одинаково было. В IDE у меня в настройках задано слежение за корректностью регистра при написании имён классов и функций/методов. Но классы у меня подключаются через автозагрузчик, а имена необходимых классов формируются другим методом - здесь и была неприметная ошибка с регистром. Если бы имена классов были регистрозависимыми, то класс с некорректным регистром так же бы успешно подключался, но при первом явном использовании класса с корректным регистром (например, вызов статики) была бы сгенерирована ошибка . Правда, при отсутствии в коде явного упоминания класса ошибка по-прежнему осталась бы незамеченной.

Сейчас в автозагрузчике классов после успешного подключения файла добавил проверку:
Код: php
1.
in_array($className, get_declared_classes())
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39533013
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://php.net/manual/ru/function.class-exists.php


Список параметров ¶

class_name

Имя класса. Воспринимается без учета регистра.
autoload

Вызывать ли по умолчанию __autoload.
...
Рейтинг: 0 / 0
(php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
    #39533109
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИмя класса. Воспринимается без учета регистра.Да. В справке указано. Только никто внимания не обратил.
Но в любом случае это не особенность работы конкретной функции, а общая особенность работы php с классами (как показал vkle )
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php 6) Функция [class_exists("...", false)] проверяет класс без учёта регистра
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]