Я смотрел на Ruby, и у него очень хорошая структура OO в отличие от PHP с C-подобными строковыми функциями. Мне было интересно, есть ли расширение, которое делает строки в объекты, чтобы вы могли использовать их следующим образом:
$str = "sometext"; echo "len:" . $str->length; //would print 'len: 8'
Взгляните на это…
http://code.google.com/p/php-string/downloads/detail?name=string.php&can=2&q=
Класс поддерживает расширения mbstring и iconv и пакет PHP-UTF8. Он выбирает наилучшую доступную функцию для каждого метода. Кроме того, он предоставляет множество новых методов. Некоторые из них: substringBetween, сращивание, startWith, endWith и сжатие. Также можно использовать внутренние функции PHP или пользовательские функции для управления строкой.
Образец кода:
<?php include('string.php'); $str = new String('sometext'); echo $str->length; //prints 8 echo $str->getLength(); //prints 8 ?>
в<?php include('string.php'); $str = new String('sometext'); echo $str->length; //prints 8 echo $str->getLength(); //prints 8 ?>
Я никогда раньше не использовал этот класс, но, посмотрев на его документацию, у него есть довольно интересные методы. capize, charAt, compareTo, содержит и т. д.
Если бы вы хотели, чтобы вы могли создать свой собственный класс оболочки String, который имеет все методы на основе строк и рассчитанные атрибуты, которые вы, возможно, захотите. Изменить. Точно так же, как Java имеет классы-оболочки для некоторых типов данных.
Я немного опоздал в игру, но я искал библиотеку именно так и наткнулся на этот вопрос. После большего расследования я нашел блестящих danielstjules / Stringy в GitHub.
Я просмотрел документацию и источник, и это выглядит чертовски твердым. Я бы рекомендовал взглянуть на это, если вы хотите, чтобы класс PHP String Wrapper упрощал управление строками. Обратите внимание, что этот код не является расширением PHP, то есть нет встроенных манипуляций, это просто оболочка.
Библиотека управления строкой PHP с поддержкой многобайтовых файлов. Совместимость с PHP 5.3+, PHP 7 и HHVM.
Несколько примеров:
s('Upper Camel-Case')->upperCamelize(); // 'UpperCamelCase' s('What are your plans today?')->truncate(19, '...'); // 'What are your pl...' s('foo & bar')->containsAll(['foo', 'bar']); // true s('Ο συγγραφέας είπε')->countSubstr('α'); // 2
В то время как Хосе Вега предложил хорошее решение для вашей проблемы, в этом подходе есть довольно незначительная проблема с производительностью. Я взбесил тест для этого. Хотя каждое решение работает достаточно хорошо для практических целей, есть разница.
EDIT: Так или иначе, поскольку это не Ruby, ни Java, ни Smalltalk, вам лучше использовать предоставленные инструменты, чем пытаться сгибать язык в соответствии с вашими ожиданиями. В основном по причинам производительности (поскольку собственные инструменты обычно пишутся на C или достаточно низки, чтобы иметь очень малое влияние на производительность, хотя это не всегда так) и для удобства чтения: сообщество используется для просмотра mb_strlen () или strlen () , и другие связанные с строкой функции.
Вот код, который я использовал для бенчмаркинга:
Результаты:
====> Test run 0 And here are the results: Test with {} = 0.00097203254699707 Test with strlen() = 0.0030488967895508 Test with mb_strlen() = 0.0031669139862061 Test with String1 object = 0.012485027313232 Test with String object = 0.036020040512085 ====> Test run 1 Test with {} = 0.00095200538635254 Test with strlen() = 0.0029759407043457 Test with mb_strlen() = 0.0031669139862061 Test with String1 object = 0.012346982955933 Test with String object = 0.036028146743774 ====> Test run 2 Test with {} = 0.0009617805480957 Test with strlen() = 0.0029959678649902 Test with mb_strlen() = 0.0031518936157227 Test with String1 object = 0.012416124343872 Test with String object = 0.037784099578857 ====> Test run 3 Test with {} = 0.00081610679626465 Test with strlen() = 0.0025439262390137 Test with mb_strlen() = 0.0027410984039307 Test with String1 object = 0.010634183883667 Test with String object = 0.030903100967407 ====> Test run 4 Test with {} = 0.00081205368041992 Test with strlen() = 0.0025379657745361 Test with mb_strlen() = 0.0027129650115967 Test with String1 object = 0.010583162307739 Test with String object = 0.031081914901733 ====> Test run 5 Test with {} = 0.000823974609375 Test with strlen() = 0.0025639533996582 Test with mb_strlen() = 0.0026860237121582 Test with String1 object = 0.010586023330688 Test with String object = 0.030833959579468
Существует SplString . Но он еще не доступен в PHP 5.3. И я сомневаюсь, что это очень полезно, если это произойдет, поскольку оно не содержит никаких полезных методов. Возможно, на нем можно было бы построить. Но тогда это только для строк. PHP построен на скалярах, и использование этого полностью объектно-ориентированного в настоящее время невозможно.
Это 2014, а SplString по-прежнему не используется по умолчанию в PHP. Я бы посмотрел:
https://github.com/nikic/scalar_objects
Это расширение, поэтому вам нужно его установить.