>Мелкий скорей всего так и есть ,т.к константу нельзя переписать
Авотфиг. Если написать в конструкторе класса БЭ echo self::C, то тогда выведется 100600, т.е. константа переопределяется. Также напоминаю что со статическими полями та же фигня.
Добавлено:
Есть подозрение, что косяк вот в чём:
self - это константа, которая заменяется на имя класса в котором обЪявлен метод (в нашем случае это A).
$this - это переменная в которой хранится ссылка на создаваемый обЪект. В нашем случае обЪект БЭ.
Вот если бы к константам можно было к константам через зыс обращаться...
2unded
Ты меня неправильно понял. Я хочу добиться эффекта прототивоположного тому что ты предлагаешь.
2Arch-Web На сколько я знаю при наследовании, в классе наследнике создаются свои методы. И они нифига не должны вызываться из класа родителя. Для этого есть ключевое слово parent.
Здесь всё ОК, выводится 100600 как и следовало ожидать. Почему эта фича не работает с константами и статическими полями, йух его знает. Возможно дело в разнице "->" и "::". Или просто я туплю?
>Хотя если второе в большинстве случаев предполагается true, то правильно оставить как есть.
ТруЪ нужно использовать для массивов которые могут затрагивать магические кавычки. Тоесть посты, геты, куки. Они, по моему, чаще нуждаются в экранировании.
> И всё равно я не пойму, зачем класс (а не функция с 3 параметрами), зачем ему массив, а не отдельная строка.
Функция будет экранировать весь массив. А благодоря использованию класса можно сделать экранирование только используемых элементов. А если делать экранирование отдельных строк, то так писать менее удобно:
>экранирование происходит только при обращении к конкретному элементу. Остальные остаются нетронутыми.
И в правду глупость написал. Я хотел сказать, что оригинальный массив не затрагивается.
>А как определяется какой элемент массива должен быть обработан под MySql, какой для HTML - я так и не понял.
Очень просто:
>А как же использование данных для командой строки?
Пока такой необходимости не возникало. Допишу.
>А если у меня там большое количество элементов, которые не полагается экранировать - работа в пустую?
Неа. Я же писал что экранирование происходит только при обращении к конкретному элементу. Остальные остаются нетронутыми.
>А если часть данных массива мне надо подготовить для безопасной работы с БД, а часть - для вывода в браузер?
Создаём два обЪекта с разными режимами экранирования и не паримся. Т.к. входной массив не копируется, то памяти это сожрёт не много, какой-бы большой не был массив.
> А работа с различными кодировками?
Не подумал. Самые распространённые цп1251 и утф8. Пожалуй тут не используются функции, которые некорректно с ними работают. Или я ошибаюсь?
> можно использовать один с массивами в качестве параметров
Да, согласен. Переделаю.
>Выпиливать ли магические кавычки - я всё равно должен определить сам? Пусть тогда уж класс это за меня делает.
Не, класс какраз это сам делает. Но иногда нужно принудительно отключить это выпиливание. В комментах к классу есть пример.
Представляю вашему вниманию самопальный класс для экранирования строк от небезопасных символов. По моему очень неудобно каждый раз при выводе данных в браузер писать длинное htmlspecialchars, а при сохранении данных в БД использовать mysql_real_escape_string. Да ещё эти ваши магические кавычки проверять надо, чтобы не получить двойного экранирования. Все эти траблы решаются при использовании класса SafeData.
У класса есть 3 режима экранирования:
SafeData::NONE - Без экранирования. Пригодится если нужно выпилить магические кавычки
SafeData::MYSQL - Для сохранения инфы в БД. Использует самописный аналог mysql_real_escape_string, ибо стандартная функция требует подключение к БД, а это не всегда возможно.
SafeData::HTML - Заменяет опасные для HTML символы соответствующими сущностями
$экранируемыйМассив - любой массив или обЪект SafeData (для примеения нескольких типов экрнирования к одному массиву). Можно даже многомерный.
$типЭкранирования - см. типы чуть выше
$выпиливать-лиМагическиеКавычки - принудительно отключает вырезку магических кавычек (см. описание в комментах к классу)
Благодаря тому что класс реализует интерфейсы Iterator и ArrayAccess, с его обЪектом можно работать как с обычным массивом, т.е. юзать оператор foreach и скобки [].
Главное то, что оригинальный массив остаётся неизменным при экранирвании (однако, если в примере выше написать $post["a"] = "1234", то $_POST всё-таки изменится). Также можно без проблем засунуть в конструктор массив имеющий 100500 элементов, т.к. класс не копирует массив, а лишь хранит ссылку на него, а экранирование идёт только во время доступа к элементу.
Тут такое дело. Есть здоровый файл на удалённом сервере. Есть мой хост. Есть юзер. Нужно отдать юзеру файл, не показывая его реальное местоположение. Вроде бы всё просто... Но! Файл большой, а скорость у юзера низкая (возможно). Если будем делать так: while(...) echo fgets(...);, тогда засрётся (или нет??) оч. много памяти, т.к. цикл пройдёт относительно быстро, а пользователь ещё не успеет зохавать весь файл.
Внимание вопрос: как можно реализовать постепенное скачивание и отдачу файла? sleep() - не вариант.
Можно на страницу жабаскрипт сунуть. Пусть он, к примеру, каждые 10 сек пхп скрипту отправляет юзерский ид. Если в назначеное врямя инфа не придёт, значит либо юзеро свалил с твоего сайта, либо он закрыл браузер следовательно можно очищать тхт-файл юзера с этим ид-ом.