秀丸の「関数」や「文」をラップしてみよう
秀丸マクロの「関数」や「文」をPHPの関数として使えるようにラップしてみましょう。
秀丸マクロでは「関数」とは「引数にカッコが付いており、値が返るもの」、
「文」とは「引数にはカッコが付かず、値が返らないもの」です。
PHP上では、区別は特になく、「値が返る関数」と「値が返らない関数」程度の違いととらえればよいでしょう。
wcsmidstr( s1, n1, n2 ) 関数
https://help.maruo.co.jp/hidemac/html/070_Function_wcsmidstr.html
の関数をラップしてみましょう。
実際には、PHPの方がはるかに豊富な文字列系機能を備えているため、このような関数をPHPでラップする
必要はありませんが、
今回は練習だと思ってください。
引数をsetVarで渡し、関数や文を実行し、返り値をgetVarでもらう
上の例のように、引数をsetVarで渡し、関数や文を実行し、返り値をgetVarでもらう。
これがラッピング方法の大原則です。
文字列の引数の中身を、直接 doEvalのヒアドキュメント内で文字列として連結するのは避けましょう。
「"」が文字列中に含まれていたらどうなるなどの悩ましい問題が出てくるためです。
そのような問題が発生しない、「getVar, setVarによる変数の伝搬」を構築の基本としましょう。
以上を理解していれば、ラッピングの実装を誤ることはないでしょう。
さらに簡単に実装できる
hmPeachにはさらに簡単に実装できる仕組みが用意されています。