月別アーカイブ: 2013年6月

PHP、JavaScriptそれぞれにおける無名関数

PHPとJavaScriptを同時に使って開発を行う事が多いという個人的事情のため、混同しないようにする目的で書いているこの比較シリーズですが、今回は無名関数について扱います。

無名関数というのは、関数的な処理のまとまりを、名前空間を消費することなくアドホックに定義する手法で、最近ではajaxなどの通信を伴う関数の、コールバック関数として使われるのが一番身近な使用と言えるかもしれません。無名関数使用例の紹介もかねて、PHPとJavaScriptそれぞれの無名関数の書式を見てみましょう。

PHPにおける無名関数

基本的な書式

以前、spl_autoload_register関数の説明で用いた例です。

//無名関数の登録
spl_autoload_register(function($classname){
include $classname . ".class.php";
});

なにやらjQuery方面でよく見かけそうな、中括弧と小括弧の連続です。
無名関数を使っているのはspl_autoload_register関数の引数の部分で、したがってfunctionの前の”(“と最後の”)”は、無名関数の書式とは関係ありません。つまり、通常の関数定義を関数名を抜かして行えば無名関数になるわけですね。

無名関数の即時実行

なお、定義した無名関数に値を与えて即時実行する場合、可変長引数を関数内で引き渡す記事の際に使ったcall_user_func_array関数、もしくはcall_user_func関数を使います。

//無名関数の即時実行
//call_user_func(関数名,引数)という書式でしたね。
 
call_user_func(function($classname){
include $classname . ".class.php";
},"dullFunction");

PHPの無名関数の注意点としては、無名関数が使用可能なヴァージョンが5.3以降と、比較的最近実装された機能だという事です。現在稼働中のプログラムでも、5.2系のヴァージョンで作成され今まで運用されているものが結構ありますので、その場合無名関数は使えないので注意です。

JavaScriptにおける無名関数

基本的な書式

JavaScriptを使ったajax開発では、無名関数が頻繁に登場します。以下はjQueryの$.ajaxでコールバックとして無名関数を登録する例です。

//ajaxコールバックとして無名関数の登録
$.ajax({
url : "test.html",
success : function(data){
$("#contents").append(data);
}
});

successのラベル以降が無名関数の使用になります。PHPのものと、変数に$が付くか付かないか程度の違いしかありません。

無名関数の即時実行

無名関数の即時実行について、JavaScriptは専用の関数を持っていません。かわりにより簡潔な書き方で即時実行をすることが出来るようになっています。

//無名関数の即時実行
(function(data){
$("#contents").append(data);
})(anydata);

通常の無名関数の宣言との違いは、関数名にあたる部分を括弧でくくり、また関数の実行なので最後にセミコロンをつけているだけです。

即時実行の利用頻度は低いかもしれませんが、ソースコードの中に急に出現した括弧付きの無名関数宣言に、当惑してしまわぬよう頭の片隅に入れておくとよろしいでしょう。


WordPressプラグイン WP Social Bookmarking Lightを導入 

今更ながら、世間で流行っているtwitter、Facebookのユーザにおいでおいでをするため、ツイートするボタンやいいね!ボタンをブログ記事につけられるプラグインを入れてみた。WP Social Bookmarking Liteという、日本では非常にポピュラーなプラグイン。

何故導入するに至ったかというと、数年前と比べてこのブログ(前身は2010年からですので、もう4年経ちましたか)に他ブログからリンクが貼られることが少なくなり、たまに貼られるリンクはtwitterやFacebookのものが多くなってきていたもので。おそらく、以前ネット上でどこか他のページのコンテンツを紹介する際に行われていた、URLコピー&ペーストという儀式が廃れ、全てSNSのボタンをクリック→紹介という手順に変わってしまったのだろうと思われる。最早、URLという存在があるということも意識されていないかもしれない。twitterのタイムラインだけ眺めて、自分ではネットサーフィンをしないという利用もあるかもしれない。

で、導入の手順は、wordpressのプラグインメニューで検索して、インストールするだけなのだが、設定が独特だったので、少し解説をしておきたいと思う。

WP Social Bookmarking Light設定

設定画面

まず一般設定のタブで、SNSボタンの表示位置や表示非表示を決める。表示するものは、ウィジェットの登録と同じようにドラッグ&ドロップで左の枠に投げ込む。

スタイルのタブは、CSSをいじる画面。その隣から先ほど登録したサービスごとの設定画面になるが、言語設定が選べるので、国粋主義者なら日本語を選ぼう。もし志賀直哉ならば、フランス語を選んでも良い。

以上で、記事中の決めた位置にボタンが出るようになる。まあ大抵のテーマならデフォルトの位置で大丈夫だろうけど、見栄えが悪いようだったらCSSでmarginなどをつめるとよい。何故か全てのボタンを囲む.wp_social_bookmarking_lightというクラスのdivは、高さが指定されておらず、ボタンがはみ出している状態で表示されているので、marginをつけるのならばまずheightを指定しておかないといけない。それ以外は特に気をつけることはないだろう。

あと数年もすれば、ボタンを押す手間もなく念ずるだけでリンクが出来るようになるはずなので、それまでこのプラグインには活躍してもらおう。