http://d.hatena.ne.jp/yone098/20090409/1239244521
PHPのよさというか、このままではまだまだJavaらしすぎてキモさが足りない。
というわけでもっとPHPらしいキモいすばらしいコードにしてみる。
まずクラス名は適当でよい。とりあえずPhpとでもしておこう。最重要項目としてパッケージ名は必須だ!とりあえずphpとでもしておく。
そしてメソッドにキモを入れ込む。
public class Php { public static String $_GET(String param){ …省略… return (T) request.get(name); } public static <T> T $_SESSION(String name){ …省略… return (T) session.get(name); } public static void $_SESSION(String name,Object data){ …省略… session.put(name, data); } }
普通に使う分にはこうなる。キモさが足りない。
String param1 = Php.$_GET("param1");
System.out.println(param1);
そこでstatic Importを使う。パッケージ名が必須の理由はこれだ!
先ほどのGETはこうなる。すばらしいキモさだ。
import static php.Php.*; …省略… String param1 = $_GET("param1"); System.out.println(param1); …省略…
もちろんセッションも扱うことは出来る。
import static php.Php.*; …省略… $_SESSION("せっしょん名", "せっしょんにはいってるかな?"); String session = $_SESSION("せっしょん名"); System.out.println(session); …省略…
キモイことこの上ない。
ちなみに意外なことにstatic importはJSPでも使える。
<%@page import="static php.Php.*" %> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello <%= $_GET("きもっ")%></h1> </body> </html>
上にあるエンコーディング指定は仕方がないとして、インポートの宣言が邪魔だな。
JSPフラグメントを作成する。
<%@ page pageEncoding="UTF-8" %> <%@page import="static php.Php.*" %>
JSPフラグメントをヘッダに指定する。NetBeansあたりならJSPF作成だけでここまで自動で設定してくれるので楽チンだ。
<jsp-config> <jsp-property-group> <display-name>php</display-name> <url-pattern>*.jsp</url-pattern> <include-prelude>/jspf/phpheader.jspf</include-prelude> </jsp-property-group> </jsp-config>
これでJSPからstatic importの宣言が消える。
ただし、NetBeansでもさすがに追いきれていないのでソースを書くときにはエラーが出るし、補完がきかないのでお勧めしない。実行すると問題はないけど。
タグライブラリ等はちゃんと追従するのにさすがにstatic importまではNetBeansでも追いきれていないか。キモイのはいやだとNetBeansが悲鳴を上げているようだ。もちろん、Eclipseも悲鳴を上げる(というかこちらはタグライブラリもまともには…)。
ここまれやれば十二分にキモイ。*.javaなど書かずに漢らしくガンガンJSPファイルにロジックをうめこんでスパゲティにしていこう!