Javascript альтернативы php функций.
Нашел файл - библиотеку функций, альтернатив php’шным на javascript’е. От элементарных вроде strtolower до адских вроде soundex:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function soundex( str ) { // http://kevin.vanzonneveld.net // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) // * example 1: soundex('Kevin'); // * returns 1: 'K150' var i, j, l, r, p = isNaN(p) ? 4 : p > 10 ? 10 : p < 4 ? 4 : p, m = {BFPV: 1, CGJKQSXZ: 2, DT: 3, L: 4, MN: 5, R: 6}, r = (s = str.toUpperCase().replace(/[^A-Z]/g, "").split("")).splice(0, 1); for(i = -1, l = s.length; ++i < l;){ for(j in m){ if(j.indexOf(s[i]) + 1 && r[r.length-1] != m[j] && r.push(m[j])){ break; } } } return r.length > p && (r.length = p), r.join("") + (new Array(p - r.length + 1)).join("0"); } |
Полный список:
- addslashes
- array_chunk
- array_combine
- array_diff
- array_diff_assoc
- array_key_exists
- array_pop
- array_push
- array_search
- array_shift
- array_sum
- array_unique
- array_unshift
- base64_decode
- base64_encode
- basename
- checkdate
- chr
- count
- crc32
- date
- empty
- end
- explode
- function_exists
- htmlentities
- implode
- include
- include_once
- in_array
- is_array
- is_numeric
- levenshtein
- ltrim
- md5
- nl2br
- number_format
- ord
- printf
- rand
- reset
- rtrim
- soundex
- sprintf
- stripslashes
- strip_tags
- strlen
- strpos
- strrpos
- strtolower
- strtoupper
- str_pad
- str_repeat
- str_replace
- str_rot13
- trim
- ucfirst
- ucwords
- utf8_decode
- utf8_encode
- wordwrap
Я постоянно что-нибудь такое в гугле ищу, может и вам пригодится.


January 19th, 2008 at 7:53 pm
Респект, отличная либа!
January 19th, 2008 at 10:14 pm
Ну, soundex не такая уж и сложная функция.
January 20th, 2008 at 3:15 am
во спасибо. У меня так руки и не дошли собрать свои изыски в одну либу
January 20th, 2008 at 3:30 pm
Спасибо! Как раз на днях искал функции для работы с массивами
January 21st, 2008 at 9:45 am
было бы совсем замечательно если бы все эти функции были завёрнуты в своё пространство имён… “php” например
January 21st, 2008 at 9:08 pm
FX Poster, я все время собираюсь ее где-нить применить. Но сколько пишу - ни разу не было случая.
KOS_MOS, andy, TracKer, пожалуйста, пожалйста, пожалуйста :))
Steward, думаю, что подключать ее полностью все же не очень целесообразно. 40кб, не так уж и мало, а много функций этих юзать все равно редко где прийдется.
January 23rd, 2008 at 5:45 am
Идея отличная, жаль только одно: с направлением работы фатально ошиблись. Надо было не javascript под php подгонять, а наоборот: реализовать в php хотя бы какое-то подобие поведения типов JS. Например, строки сделать объектами. Простой пример с регулярными выражениями: какой код более лаконичен и красив? Такой:
<?php$size = '';
$string = "Jackodaws loves my big sphinx of quartz";
if (preg_match('/(big|small)/i', $string, $match)) {
$size = $match[1];
$string = preg_replace(”/$size/”, $size == ‘big’ ? ’small’ : ‘big’, $string);
}
?>
или такой?
<?php$size = '';
$string = new String("Jackodaws loves my big sphinx of quartz");
if ($regexp = $string->match('/(big|small)/i')) {
$size = $regexp->getMatched(1);
$string->replace("/$size/", $size == 'big' ? 'small' : 'big');
}
?>
Лично мне второй вариант как-то больше импонирует.
Кстати, буквально вчера я думал на эту тему и даже кое-что написал, благо PHP5 позволяет довольно многое.
Основная проблема подхода в том, что для того, чтобы строка сама по себе стала объектом, придётся или патчить php, или переписывать значительную часть кода, т.к. многие программисты не гнушаются выводить текст через echo. У меня всё построено несколько иначе, поэтому я себе такой подход позволить могу =)
З.Ы. всё вышесказанное не претендует на истину в последней инстанции. Это всего лишь IMHO
January 23rd, 2008 at 4:23 pm
nopox, симпатичней, конечно. Но как то вот, не настолько чтоб переписывать основы языка, имхо. Но все равно будет интересно посмотреть как ты реализуешь.
echo ведь не главное, как быть с конкатенацией. А вообще, может гоню, но в 6м есть какие-то извращения плана object to string, можно их заюзать.
January 23rd, 2008 at 4:56 pm
А язык переписывать и не надо, достаточно придумать собственную надстройку и использовать её в работе.
С реализацией всё предельно просто: создаём класс, имеющий:
закрытый член, который и будет хранить строку
конструктор, единственный аргумент которого будет помещаться в тот закрытый член класса
магический метод __toString(), определяющий поведение класса при использовании его в строковом контексте
Примерно вот так:
class String{
private $_str = $str;
public function __construct($str)
{
$this->_str = $str;
}
public function __toString()
{
return $this->_str;
}
public function length()
{
return strlen($this->_str);
}
}
В этом классе реализован единственный прикладной метод: String::length(), который, как всем понятно, возвращает длину строки. Подобным образом можно обернуть самые нужные строковые функции (или даже все — тут вопрос лени, он у меня стоит очень остро :)). Определённые сложности возникнут с регулярными выражениями (одного класса String будет мало, как мне кажеися), но об этом мы поговорим в другой раз, если тема сильно заинтересует :).
На всякий пожарный приведу пример использования:
length(); // напечатает 7
/**
* Напечатали объект - получилась строка
*
*/
print $myString; // напечатает Foo Bar
?>
Как с конкатенацией быть, честно говоря, не знаю. Наверное, никак. Впрочем, у меня как-то не очень часто возникала потребность её использовать; если сильно припрёт, то можно исползовать родной подход. Или, что более красиво, нарисовать метод String::append():
public function append($str)
{
$this->_str.= $str;
}
Так даже ещё симпатичнее будет, по-моему.
А по сабжу… По-моему, глупо это — от красивого языка переходить к PHP, да ещё и процедурно… Собственно, за что многие не любят php, так это за низкий порог вхождения. Будь он чуть посложнее, глядишь, и не было бы кучи отстойных скриптов и множества дефейсов.
З.Ы. А как-нибудь раскрасить код в комментах можно? Или выровнять хотя бы.
January 23rd, 2008 at 10:42 pm
Угу, теперь тебя понял. php переписать было бы тоже весело, чтоб он и при $var = “val”; объект создавал. А вообще - тема достойна развития, думаю многим будет интересно “яваскрипт функции на php” )
Спасибо за туториал.
Здесь как-бы больше не про переход к функциям, а мне эта штука более полезна просто как вроде справочника, потому как все время забываю на яваскрипте функции как звучат, а chm’а красивого так ни разу и не нашел.
Раскрасить код… можно конечно
Но я попробую плагин поискать.
February 9th, 2008 at 8:42 pm
Подскажите как ети коды можна вставлять в Flash скрипты !
February 14th, 2008 at 1:03 am
Влад, я не знаю.
March 4th, 2008 at 9:58 am
Интересно конечно… но вот где применить даже и не знаю, тем более что JS-фреймворки сейчас захватили почти всё…т.е. уже мало что нужно писать самому
March 4th, 2008 at 9:32 pm
ACID Jesus, фреймворки ведь поверхностную работу выполняют. Логику все равно самому писать приходится.
March 4th, 2008 at 10:32 pm
а по мне полюбас Prototype forever!
March 4th, 2008 at 10:51 pm
А мой фломастер - наверное - jquery.
March 4th, 2008 at 11:17 pm
Вы, Алексей, тёплое с мягким путаете немного. Prototype.js (как, впрочем и jQuery) для других целей сделан, нежели эта сборка
March 4th, 2008 at 11:22 pm
Вообще да, nopox прав.
March 5th, 2008 at 10:21 am
есть молоко из которого можно сделать творог или сырники. Рассматриваемая библиотека - это творог или сырники а прототайп и любой другой фреймворк это молоко. Уверяю Вас, если вы попытаетесь при создании ресурса смешать более 3 “полезные штуки” - начнется хаос… все перечисленные функции можно написать с помощью любого фреймворка, имхо!
March 5th, 2008 at 4:04 pm
Можно конечно, но ничего удачнее не получится. Фреймворки ведь написаны для работы с dom, стилями, эффектами и т.п. А здесь - чистая логика, т.е. упрощать то по идее некуда.
Насчет хаоса - да, согласен. Но как-бы подключать ее всю и не надо. Редко найдется проект, в котором хотя бы половину этих функций юзать прийдется, а вот как напоминание себе или такой себе музей велосипедов - эта либа самое оно.