это я переименовывал caseLetters в changeCase. И вроде ж использовал найти и заменить во всем проекте, а заменило не везде. phpDesigner удобен, но к рефакторингу не располагает. обновил немного и документацию upd: сейчас вроде норм должно быть. У меня примеры нормально отрабатывают. эта, FIRST наверно будет удаляться и заменяться на LEFT. Поэтому FIRST_UP наверно пока пусть побудет
а вообще - если я захочу сделать все большыми, кроме первых букв каждого слова? предлагаю так: Str::changeCase( $string, [ Str::ALL | Str::FIRST | Str::TITLE ], [ Str:OWN | Str::UP | Str:OWN_FORCED | Str::UP_FORCED ] ); Захотел сделать все буквы большими - Str::changeCase($string, Str::ALL, Str::UP); Первую - маленькой, остальные - большими: Str::changeCase($string, Str::FIRST, Str:OWN_FORCED); Первую каждого слова большими - остальные - маленькими: Str::changeCase($string, Str::TITLE, Str::UP_FORCED); И так далее
а может сделать метод negativeCase? чат сегодня здесь) зы: обновил предыдущий пост хотя и предложеный выше вариант стоит реализовать
Koc, не. мне сначала тоже показалось, что мой способ тяжеловат, но: второй параметр - выбираем, с какими символами будем работать Str::ALL - со всеми, Str::FIRST - с первый, Str::TITLE - с первым, в каждом слове третий параметр - что будем с ними делать: Str:OWN - приводим к нижнему регистру, Str::UP - приводим к верхнему регистру, Str:OWN_FORCED - приводим к нижнему регистру, а все остальные - к верхнему, Str::UP_FORCED - приводим к верхнему регистру, а все остальные - к нижнему. Все логично и понятно.
Да влом писать. Короче говоря было бы неплохо если бы класс проверял, перезагружены ли функции и если они перезагружены, то реализовывал бы методы многобайтного режима для неперезагруженных функций. Чтото типа того...
В общем есть такое предложение. Я тут за денек накидал скрипт, специально для данного проекта. http://php.freecr.ru/ Добавление и редактирование происходит путем редактирования xml-кода. Несколько функций написал маны - очень легко и быстро. Можно заметить идеологически-верные ссылки: http://php.freecr.ru/manual/Str/trim/ Предлагаю дальнейшим основным полигоном для мануала и обсуждений использовать именно этот скрипт. Естественно, над дизайном я пока не работал. При положительном отзыве продолжу разработку скрипта, прикручу комменты и т.п. Преимущества и недостатки перед расположением на google.com, я думаю, очевидны. Ну и готов оказать помощь в написании манов. HTML: <?xml version="1.0" encoding="UTF-8"?> <method class='Str' classDescr='Строковые функции' name='length' descr='Возвращает длину строки'> <block name='Описание'> <pattern>string length(string $string)</pattern> Возвращает длину строки $string. <example title='Пример использования Str::length()'> <?php echo Str::length('Строка'); // 6 echo Str::length(' С т р о к а '); // 13 ?> </example> </block> <block name='Возвращаемые значения'> Длина строки $string </block> </method>
kostyl не, пока остаемся зимовать, вернее оставлю то, что есть TheShock о-го-го, наверно я тогда не смогу писать мануалы, синтаксис жжосткий =). из минусов: отсутствие ревизий (нельзя откатывать изменения в мануале), синтаксис не вики а свой. Мне вообще все равно что с этим мануалом, я и так пока что понимаю. А потом добавлю phpdoc к главному Str классу и будет совсем хорошо. Вернее я знаю, что мануал на вики гугла это не ксть гуд, я в любом случае планировал его перемещать потом на какой-то поддомен *.brouzie.com, обязательно с кнопочкой donate, бгг. В общем если есть желание: пиши. Я ссылку на google-code повешу.
Берется уже готовый хмл-документ, и редактируются поля. Ревизий - нету, да. Хотя сделать, нетяжело. Синтаксис можно любой тоже сделать - это один класс поменять. Я сначала думал в стиле BB-Code придумать. Но текущий синтаксис реально удобный. ps. ненавижу phpdoc во всех либах, которые скачиваю - удаляю все пхпДок кумментарии. в первую очередь * Написал в личку
phpdoc не люблю когда что-то разрабатываю. Если б моя IDE могла показывать его при автодополнении и скрывать при редактировании, при этом строки сжимая - было б круто.
Koc Поетому лучше пользоваться ZDE или чем-то подобным, поддерживающим code folding и phpDoc completion phpDocumentator генерирует документацию в куче форматов, так что есть очень большой резон по использованию phpDoc - обновляться дока будет практически одной командой (я не работал с phpDocumentator, но насколько я знаю - дело обстоит так).
еще как интересно. я постоянно об этом думаю. Точно такие же обертки нужны для файлов, сокетов, картинок, почты, массивов, денег, шифрования, и всего всего остального. Для дат к счастью они сами уже додумали. долго соображают. А в цепочки твои класс можно будет связывать, как в том блоге, который тебе навеял идею? типа PHP: <?php $str->add("asdfas")->preg_replace("слоны","коровы")->upeer()->base64() И еще об одном прошу подумать. Библиотека, мне кажется, нравятся или не нравятся нам всем имена стандартных функций, должна повторять их. это как всегда в жизни, надо пожертвовать маленьким благом во имя большего. PHPDoc однозначно да. Тоже стандарт.
Это статичный класс. Захочешь - сам потом переделаешь, чтобы так было. Я вот собираюсь переделать Не согласен, читай обсуждение выше.
в репозиторий добавлен метод Str::rev - улучшенная ф-ция strrev. Добавлены параметры int $from, int $to. То есть можно зеркалить не всю строку а только с $from символа. Или с $from до $to символов Но тут возникают вопросы: что если Str::length($str) < $to или $to < $from я должен обрабатывать как-то некорректные данные от пользователя? или лучше заменить $to на $length (сколько символов отражать)? и пришлось добавить отдельно ф-цию array_get_range alexey_baranov это уже нужно будет написать еще одну обертку над Str классом). Посмотрим, может сделаю. Psih Zend большой и неповоротливый(. У меня даже нет столько места свободного, что б скачать его. Есть netbeans 6.7, но там такое дурацкое автодополнение ф-ций. зы: как из репозитория удалить папки старые?
Метод slice, по анологии с array_slice(). PHP: <? function slice($string, $offset, $len = null){ return join('', array_slice(str_split($string), $offset, $len)); } Попытка воссоздать $string[0] - str::slice($string, 0, 12). Разбиваем строку на массив, делаем ему array_slice(), потом обьеденяем строку обратно. Косяк может быть в функции str_split(), не знаю насколько быстро она работает и с каким обьёмом. P.S. Удалять старые папки из SVN: если средствами ЧерепашкиSVN, то надо сделать обзор хранилища и из этого окна удалять. А вот как через командную строку хз.
Psih ща вроде 7-я версия Зенда вышла. И он платный вроде? хотя phpDesigner тоже платный, бгг зы: чего форум недоступен через php.ru/forum? выдает 404. А через www.php.ru/forum все ок lexa у меня репозиторий - mercurial. Вроде когда использовал на локалке truc то все удаляло автоматом. Я же делаю коммит, потом push его на сервер. Странно.
Koc, ыгыгы. Ни-ка-ких различий нет. Это я туплю. Не спал вторые сутки. Пошёл за кофе и тааак мне моя придумка понравилась, что я совершенно позабыл про substr(). P.S. Серьёзно, я был так восхищён своей идеей. Блин.
ну ваще substr я пока не добавлял в класс. Нужно подумать как расширить его. Или оставить как есть. сон важен для продуктивной работы и жизни в целом). Имхо не стоит себя так терзать.
Мне тут тоже подобный класс понадобился поэтому немного напишу как у меня: PHP: <?php /** * @param string $sString * @param int $iStart * @param int $iLength */ static function Substr($sString, $iStart, $iLength) { if (self::NeedUseMBFuncs(2)) { return mb_substr($sString, $iStart, $iLength, self::$sEncoding); } else { return substr($sString, $sString, $iLength); } } /** * @param int $iOvelroadBitmask * @return bool */ private function NeedUseMBFuncs($iOvelroadBitmask) { return (self::$_iMode && self::$_iOverloadBitmask) ? (!($iOvelroadBitmask & self::$_iOverloadBitmask)) : self::$_iMode; }
kostyl Ну есть базовый класс, через который и работаем - Str. А что там внутри - не сильно и важно для конечного пользователя (программиста). Mercurial репозиторий http://code.google.com/p/strclass/source/browse/ Описание переключения режимов http://code.google.com/p/strclass/wiki/f_setMode