忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 18:13 |
ZF1.11 Zend_Filterで命名規則変換
前回前々回Zend_Filterを紹介しましたが、実はリファレンスにはフィルタクラス群のリストに載っていない謎のクラス群が存在します。
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


2011/09/05 22:45 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<ZF1.11 Zend_Loader | HOME | 買ったものリスト 2011/09/04>>
忍者ブログ[PR]