Quercus tips

ちいたんでBigTableを使えるようにするまでかなり試行錯誤したので、
Quercusのノウハウが溜まったので紹介。

importはメソッド内で。

import文はそのクラスを使うメソッド内でやらないといけない。
たとえば

function __constructor() {
import com.google.appengine.api.datastore.Entity;
}
function met() {
・・・
$e = new Entity($kind);
}

とすると、Entityが見つからないと怒られる。
正しくは、

function __constructor() {
}
function met() {
import com.google.appengine.api.datastore.Entity;
・・・
$e = new Entity($kind);
}

とする。

クラスを引数に渡すメソッドはJava内で呼び出すようにしないとダメ?

詳しくは調べてないんだけども、

public static DatastoreService get() {
return service;
}
というメソッドを用意しておいて、PHP側で
$e = new Entity($kind);
$e->setProperty("a", "aaaa");
DataStore::get()->put($e);

とすると、putメソッド内でぬるぽが発生した。
どうにもこうにも行かないので、entityの操作はjava側で処理するようにしたところうまくいった。
データの相互変換でおかしくなってるのかな?

内部クラスは未対応?

Query.FilterOperator.EQUAL
のような内部クラスのメソッド等にはアクセスできないみたい。


Query::FilterOperator::EQUAL

import com.google.appengine.api.datastore.Query.FilterOperator;
FilterOperator::EQUAL
もエラーになった。

結論

QuercusはJavaと連携できるとあるが、いまいちなところがあるよう。
Java←→PHP間のデータのやり取りは可能な限りprimitiveな型のみとするのがハマらないコツ。