Comments 22
все это хорошо. самп ользуюсь многими из этих функций.
вот только не пойму, чем их РНР-шная функция round(25.02558, 3) не устроила, что они решили использовать precision(25.02558, 3);
вот только не пойму, чем их РНР-шная функция round(25.02558, 3) не устроила, что они решили использовать precision(25.02558, 3);
precision — это sprintf("%01.3f", 25.02558)
round(25.0000,3) = 25 (float)
sprintf("%01.3f", 25.02558) = 25.000 (string)
round(25.0000,3) = 25 (float)
sprintf("%01.3f", 25.02558) = 25.000 (string)
> sprintf("%01.3f", 25.02558) = 25.000 (string)
sprintf("%01.3f", 25.0000) = 25.000 (string)
sprintf("%01.3f", 25.0000) = 25.000 (string)
результат sprintf зависит от локали и иногда это может сыграть негативную роль (например, когда значение потом попадает в Javascript, или вообще, если впоследствии оно используется и программа приводит его к типу float).
В сочетании со слабой типизацией в PHP это может дать нехорошие результаты, так что будьте осторожны и никогда не используйте результаты sprintf в вычислениях.
Лично мне приходилось, работая с legacy-кодом — делать setlocale(LC_NUMERIC, 'C'); — чтобы избежать подобных ошибок.
В сочетании со слабой типизацией в PHP это может дать нехорошие результаты, так что будьте осторожны и никогда не используйте результаты sprintf в вычислениях.
Лично мне приходилось, работая с legacy-кодом — делать setlocale(LC_NUMERIC, 'C'); — чтобы избежать подобных ошибок.
> stripLinks()
Сапсибо за статью. Сейчас как раз занимаюсь изучением CakePHP. После CodeIgniter довольно непривычно.
не понимаю, зачем дублировать встроенные функции?
чтобы разработчик вынужден был разбираться в сотнями новых оберток)
внутри функции реализованны не фонтан )
например toList() функция из 9-ти строчек…
хотя тоже самое можно сделать двумя, без всяких циклов:
тоже самое и с остальными…
сложные функции конечно лучше брать готовые, а такие простые уж набросать дело нескольких минут.
например toList() функция из 9-ти строчек…
function toList($list, $and = 'and') { $r = ''; $c = count($list) - 1; foreach ($list as $i => $item) { $r .= $item; if ($c > 0 && $i < $c) { $r .= ($i < $c - 1 ? ', ' : " {$and} "); } } return $r; }
хотя тоже самое можно сделать двумя, без всяких циклов:
function toList_upgrade($list, $and='and') { $last = sizeof($list)>1 ? " {$and} ".array_pop($list) : ''; return implode(', ', $list).$last; }
тоже самое и с остальными…
сложные функции конечно лучше брать готовые, а такие простые уж набросать дело нескольких минут.
что-то мне подсказывает, что implode работает так же, как и конкатенация в toList()
1) в любом случае, implode склеит массив быстрее чем перебор и склеивание вручную
2) да и объем функции уменьшился в два раза.
да и дело даже не в этом.
а в том что фреймворки стали модными, а встроенные в САМ язык функции некоторые так и не могут осилить, и городят трехэтажные функции, даже для элементарных задач (причем этим грешат и сами создатели фреймворков некоторых)
2) да и объем функции уменьшился в два раза.
да и дело даже не в этом.
а в том что фреймворки стали модными, а встроенные в САМ язык функции некоторые так и не могут осилить, и городят трехэтажные функции, даже для элементарных задач (причем этим грешат и сами создатели фреймворков некоторых)
Почему вынужден? Не хочет — пусть не использует.
неплохо бы такие хелперы выделять в отдельную библиотеку, чтобы пользоваться могли им и в других фреймворках
Можно скопировать файлик с хелпером и подключать его в своих приложениях. Никто мешать не будет))
ну мало ли, вдруг к этим файлам нужны другие файлы, а к ним третьи. если вы когда нибудь устанавливали проги под *nix, то поймете какой это гемор :)
а тут маленькая библиотечка хелперов без левых зависимостей
а тут маленькая библиотечка хелперов без левых зависимостей
Согласен с вами, особо не углублялся в архитектуру кейка но метод наследования классов там немного закручен и не так очевиден как в зенде. Меня раздражает тот факт что в большинстве случаев необходимо создавать обьект перед тем как вызвать какой нибудь метод скажем из хелперов, хотя ничего не мешает ему вызыватся статически.
вот пример:
function convert($serverTime, $userOffset) {
$serverOffset = $this->serverOffset();
$gmtTime = $serverTime — $serverOffset;
$userTime = $gmtTime + $userOffset * (60*60);
return $userTime;
}
почему бы не сделать так:
function convert($serverTime, $userOffset) {
return ($serverTime — self::serverOffset()) + $userOffset * 3600;
}
вот пример:
function convert($serverTime, $userOffset) {
$serverOffset = $this->serverOffset();
$gmtTime = $serverTime — $serverOffset;
$userTime = $gmtTime + $userOffset * (60*60);
return $userTime;
}
почему бы не сделать так:
function convert($serverTime, $userOffset) {
return ($serverTime — self::serverOffset()) + $userOffset * 3600;
}
Сдается мне вы совсем не углублялись в структуру кейка. В большинстве случаев нет необходимости создавать объект чтобы вызвать метод.
А приведенный вами пример абсолютно ничего не показывает.
А что касается зенда так он больше похож на набор библиотек а не на фреймворк. Хотя в последнее время ситуация вроде улучшается.
А приведенный вами пример абсолютно ничего не показывает.
А что касается зенда так он больше похож на набор библиотек а не на фреймворк. Хотя в последнее время ситуация вроде улучшается.
Пытался но с 3х попыток не подружился полностью, решил собрать собственный велосипед на магнитной подушке %)
Может вы обьясните тогда, как воспользоваться тем же методом TimeHelper::convert($time,$ofset);
без классов AppHelper, Helper, Overloadable, Object?
А в своем примере я хотел подчеркнуть что serverOffset() целессобразней вызывать статически так как к обьекту она никакого отношения не имеет да и умножать 60*60 безсмысленная трата ресурсов.
Может вы обьясните тогда, как воспользоваться тем же методом TimeHelper::convert($time,$ofset);
без классов AppHelper, Helper, Overloadable, Object?
А в своем примере я хотел подчеркнуть что serverOffset() целессобразней вызывать статически так как к обьекту она никакого отношения не имеет да и умножать 60*60 безсмысленная трата ресурсов.
Большинство методов будет работать без зависимостей. А вообще не составит большого труда узнать зависимости. Там не совсем *nix)
Sign up to leave a comment.
Хелперы. Полезные манипуляции со строками