dolem0.13.0のリリース

Read More

今日も今日とてdolemの新しいVerのリリース。
今回のVerは0.13.0

■dolem:ダウンロードページ
http://dolem.jp/?m=download


今回はdolemのビルトイン関数の改良と修正が主な内容となっている。
今回も、以前のVerとの互換性は保てているのでkernelフォルダごと上書きしてもらえればOK。


手を入れて改良した関数は以下の3つ。
・my_array_merge()
・my_htmlspecialchars()
・my_range()

他の関数はコメントレベルの修正であったり、ダブルクォートからシングルクォートに変えたりした程度なので特に意識する必要もない。
最悪、更新すら必要ない。
今回のVerUPは控えるメジャーVerUPを意識してのもの。
整える、という意味合いが強い。


更新された各関数についての変更点は以下。

・my_array_merge()
引数が2つで固定だったものからVer.002で可変長引数に変更された。
これにより無制限の配列のマージが行えるようになった。

■my_array_merge() - Ver.002
<?php
// 以前のVer
$ary1 = array('10'=> array('aaa'=>'aaaval'));
$ary2 = array('10'=> array('bbb'=>'bbbval'));
$temp = my_array_merge($ary1, $ary2);
echoecho($temp, 'temp');

// Ver.002
$ary3 = array('3' => '3val');
$temp = my_array_merge($ary1, $ary2, $ary3);
echoecho($temp, 'temp2');
?>


■結果
> array ('010' => array('aaa' => 'aaaval', 'bbb' => 'bbbval',),)
> array ('010' => array('aaa' => 'aaaval', 'bbb' => 'bbbval',), 3 => '3val',)

PHP関数でarray_merge()、array_merge_recursive()というものがあるのだが、使ったことあるならわかると思うが、なーんかイマイチ挙動が気に入らんのよね。
どちらも直感的に使うと思ってるのと違う結果になる。
# まあ感覚的なものだから自分だけかも知れん

だからmy_array_merge()を作ったんだけど、これ、ずっと2つの配列にしか対応してなかった。
作った当時から可変長引数にっていう構想はあったんだけど、実務に追われてやる暇がなかった。
それにプログラム組むとき工夫すればとりあえず何個でも配列マージできるしーとか思っちゃって。
だがまあここにきてようやく可変長引数に対応したという。

ちなみに似たような関数でmy_array_merge_n()というものもあるのだがこちらは可変長配列への変更はしていない。
その理由は、
「とりあえず関数を作ったもののあまり使ったことないなー」って気がついたから。
そのうち互換性フォルダにぶち込むような気がする。
廃止はしない。たぶん。



・my_htmlspecialchars()
Ver.003で新たに第3引数が追加された。
これにより配列で変換テーブルを渡せるようになった。

■my_htmlspecialchars() - Ver.003
<?php
// 以前のVer
$str = my_htmlspecialchars('ab c');
echoecho($str);
// Ver.003
$trans = array(' ' => '&nbsp;');
$str = my_htmlspecialchars('ab c', false, $trans);
echoecho($str);
?>


■結果
> 'ab c'
> 'ab&nbsp;c'

最初の構想では、第3引数は通常のhtmlサニタイズに加えて、さらに置換したいものを追加できるように使えた方がよいかとも考えていたのだが、色々考えていくうちに置換テーブルを丸ごと渡した方が使い勝手がよいことに気がついた。
# 上記の例では第3引数で指定しているテーブルのものしか置換処理が行われていない。
# このため通常のHTMLサニタイズは行われない。
# これを行いたい場合はget_html_translation_table()の戻り値と$transとをマージさせる必要がある。

この第3引数の使いどころは色々考えられるのだが、
例えばPCとモバイルとでは置換したい文字がそれぞれ違うことがあり得る。
なのでそれらを別の定数のような形で予め定義しておく。
# 配列を定数化するには一工夫必要。

こうすることでPCとモバイルとで違った挙動をするHTMLサニタイズが実装することができる。
また使い方によっては絵文字への変換などもできるが、それは本来の意味でのhtmlspecialchars(HTMLサニタイズ)ではなくなるのでこの関数でやらない方がよいと思われる。



・my_range()
最後にmy_range()。
こちらはVer.003で、要素の逆順の並びができるようになったのと、ASCII文字指定の精度をあげる修正となった。

■my_range() - Ver.003
<?php
// 以前のVer
$ary = my_range(1, 12);
echoecho($ary);
// Ver.003
$ary = my_range(12, 1);
echoecho($ary);
$ary = my_range('a', 'c');
echoecho($ary);
?>


■結果
> array(1=>'1', 2=>'2', 3=>'3', 4=>'4', 5=>'5', 6=>'6', 7=>'7', 8=>'8', 9=>'9', 10=>'10', 11=>'11', 12=>'12')
> array(12=>'12', 11=>'11', 10=>'10', 9=>'9', 8=>'8', 7=>'7', 6=>'6', 5=>'5', 4=>'4', 3=>'3', 2=>'2', 1=>'1')
> array('a'=>'a', 'b'=>'b', 'c'=>'c')

日本語の文字にも対応しようと思ったのだが、'あ'から'う'と指定した場合、どうしても'あぁいぃう'となってしまうので止めた。



まあそんな感じ。




Comments(1)

1  Wizard  2016/07/27 (水) 17:43 ID:rvMygbX15
『HALLO WORLD』