前回前々回Zend_Filterを紹介しましたが、実はリファレンスにはフィルタクラス群のリストに載っていない謎のクラス群が存在します。
Zend_Filter_Word_UnderscoreToDash、Zend_Filter_Word_CamelCaseToSeparatorなどZend_Filter_Word配下に属するクラス群です。
まあ謎と言っても実はインフレクタのほうに載ってるんですが。
しかしこの解説、何言ってるのか全然わからないのですが、簡単に言うと文字列変換を行うフィルタのようです。
で、インフレクタと文字列変換は実際は微妙に違う機能なのですが、リファレンスではまとめて解説されているせいでわかりにくくなっています。
ここではとりあえず文字列変換フィルタだけ使ってみます。
Zend_Filter_Wordクラス群は、キャメルケースやスネークケースといった命名規則を変換する専用のフィルタです。
Zend_Filter_Wordクラス群には全部で12のクラスがあるので、使用目的によって使い分けるとよいでしょう。
変換内容はだいたいクラス名のとおりです。
・CamelCaseToDash
・CamelCaseToSeparator
・CamelCaseToUnderscore
・DashToCamelCase
・DashToSeparator
・DashToUnderscore
・SeparatorToCamelCase
・SeparatorToDash
・SeparatorToSeparator
・UnderscoreToCamelCase
・UnderscoreToDash
・UnderscoreToSeparator
ところでこのZend_Filter_Wordクラス群は抽象クラスZend_Filter_Word_Separator_Abstractを継承しているのですが、この抽象クラスZend_Filter_Word_Separator_Abstractクラスはなんと具象クラスZend_Filter_PregReplaceを継承しています。
こりゃ面白い、と思って試してみたらJavaでも普通に継承できました。
Zend_Filter_Word_UnderscoreToDash、Zend_Filter_Word_CamelCaseToSeparatorなどZend_Filter_Word配下に属するクラス群です。
まあ謎と言っても実はインフレクタのほうに載ってるんですが。
しかしこの解説、何言ってるのか全然わからないのですが、簡単に言うと文字列変換を行うフィルタのようです。
で、インフレクタと文字列変換は実際は微妙に違う機能なのですが、リファレンスではまとめて解説されているせいでわかりにくくなっています。
ここではとりあえず文字列変換フィルタだけ使ってみます。
Zend_Filter_Wordクラス群は、キャメルケースやスネークケースといった命名規則を変換する専用のフィルタです。
<?php
//キャメルケース
$string='fooBarBazHogeFuga';
//Zend_Filter
require_once('Zend/Filter.php');
//静的にフィルタを実行
//キャメルケースからアンダースコアに
Zend_Filter::filterStatic($string, 'Word_CamelCaseToUnderscore'); //「foo_Bar_Baz_Hoge_Fuga」になる
//フィルタチェイン
require_once('Zend/Filter/Word/CamelCaseToDash.php');
require_once('Zend/Filter/Word/DashToSeparator.php');
//フィルタチェインを作成
$filterChain = new Zend_Filter();
$filterChain
->addFilter(new Zend_Filter_Word_CamelCaseToDash()) //キャメルケースから-に
->appendFilter(new Zend_Filter_Word_DashToSeparator('/'));//-から任意のセパレータに
$filterChain->filter($string); //「foo/Bar/Baz/Hoge/Fuga」になる
やってることははZend_Filter::filterStatic($string, 'PregReplace', array('match'=>'#(?<=(?:[a-z0-9]))([A-Z])#','replace'=>'_\1'));なので不要といえばそのとおりですが、正規表現などをいちいち考えずに使用できるので楽です。Zend_Filter_Wordクラス群には全部で12のクラスがあるので、使用目的によって使い分けるとよいでしょう。
変換内容はだいたいクラス名のとおりです。
・CamelCaseToDash
・CamelCaseToSeparator
・CamelCaseToUnderscore
・DashToCamelCase
・DashToSeparator
・DashToUnderscore
・SeparatorToCamelCase
・SeparatorToDash
・SeparatorToSeparator
・UnderscoreToCamelCase
・UnderscoreToDash
・UnderscoreToSeparator
ところでこのZend_Filter_Wordクラス群は抽象クラスZend_Filter_Word_Separator_Abstractを継承しているのですが、この抽象クラスZend_Filter_Word_Separator_Abstractクラスはなんと具象クラスZend_Filter_PregReplaceを継承しています。
こりゃ面白い、と思って試してみたらJavaでも普通に継承できました。
PR
トラックバック
トラックバックURL: