名前のとおり文字列操作を行う、と思いきや実は文字コード変換Wrapperのようです。
strlen()やmb_strlen()、iconv_strlen()といった関数を意識せずに使い分けることができます。
これはStrategyパターンだっけ。
まあ、いつだったかのZend\Math\BigIntegerと同じような内容です。
あとは適当に値を突っ込むだけで自動的に適切な関数を使用して変換や取得を行ってくれます。
文字列操作Wrapperの実体はZend\Stdlib\StringWrapper\StringWrapperInterfaceを実装している何らかのクラスですが、その中身について意識する必要は全くありません。
setEncoding()はStringUtils::getWrapper()の際に呼ばれるので基本的には不要です。
getWrapper()およびsetEncoding()の引数に少し注意が必要で、mb_convert_encoding()などと逆で、前の文字コードから後ろの文字コードに変換します。
strlen()やsubstr()などの文字コードも、setEncoding()の第一引数で指定したものが使われます。
またStringUtils::registerWrapper()で自作のWrapperを登録したりもできるみたいですが、そんな機能使う人なんて滅多にいないだろうからまあいいや。
使い道を無理矢理考えてみるとするならば、文字コード変換ではなく暗号化機能として使うとかでしょうか。
strlen()やmb_strlen()、iconv_strlen()といった関数を意識せずに使い分けることができます。
これはStrategyパターンだっけ。
まあ、いつだったかのZend\Math\BigIntegerと同じような内容です。
<?php
require_once('path/to/channel/vendor/autoload.php');
use Zend\Stdlib\StringUtils;
// 対応している文字列操作Wrapper一覧
$wrappers = StringUtils::getRegisteredWrappers();
// 引数がUTF-8か
$isUtf8 = StringUtils::isValidUtf8('あいうえお');
// PCRE正規表現をサポートしているか
$isPcre = StringUtils::hasPcreUnicodeSupport();
// 適切な文字列操作Wrapperを取得
$wrapperClass = StringUtils::getWrapper('UTF-8', 'SJIS-win');
$wrapper = new $wrapperClass();
// 現在の文字列操作Wrapperが対応している文字コード一覧を取得
$encoding = $wrapper->getSupportedEncodings();
// 現在の文字列操作Wrapperが引数の文字コードに対応しているか
$isSupported = $wrapper->isSupported('EUC-JP');
// 変換する文字コードを設定 前→後に変換
$wrapper->setEncoding('UTF-8', 'EUC-JP');
// 変換実行 (UTF-8からSJIS-winに)
$str = $wrapper->convert('あいうえお');
// その他
$len = $wrapper->strlen('あいうえお');
$sub = $wrapper->substr('あいうえお', 1, 3);
$pos = $wrapper->strpos('あいうえお', 'う');
$pad = $wrapper->strPad('text', 10, '埋め', STR_PAD_RIGHT);
$wrap= $wrapper->wordWrap('あいうえお', 3, '。', true);
StringUtils::getWrapper()に変換したい文字コードを渡すと、対応した文字列操作Wrapperを持ってきてくれます。あとは適当に値を突っ込むだけで自動的に適切な関数を使用して変換や取得を行ってくれます。
文字列操作Wrapperの実体はZend\Stdlib\StringWrapper\StringWrapperInterfaceを実装している何らかのクラスですが、その中身について意識する必要は全くありません。
setEncoding()はStringUtils::getWrapper()の際に呼ばれるので基本的には不要です。
getWrapper()およびsetEncoding()の引数に少し注意が必要で、mb_convert_encoding()などと逆で、前の文字コードから後ろの文字コードに変換します。
strlen()やsubstr()などの文字コードも、setEncoding()の第一引数で指定したものが使われます。
またStringUtils::registerWrapper()で自作のWrapperを登録したりもできるみたいですが、そんな機能使う人なんて滅多にいないだろうからまあいいや。
使い道を無理矢理考えてみるとするならば、文字コード変換ではなく暗号化機能として使うとかでしょうか。
PR