update.JavaとJavaScript(ちょっと)しか知らない私が、お仕事でPHPを触ることになり、その前に勉強がてらオレオレフレームワークを作ってみました。そのときにえっ!と驚いたことや、嵌ったことなどをざっくばらんに描いていきます。念のため断っておくと、この記事にはJava界隈にいる私がPHPを触ってみて思ったことを素直に書くだけで、PHPが悪いとか、Javaは優れてるか、そいういうことを主張する意図は一切ありません。文字列の連結は.(ドット)Javaではインスタンス.メンバ()のように.でオブジェクトのメンバにアクセスします。対して、PHPでの.は文字列の連結を行う演算子です。関数のオーバーロードできないこれはまぁPHPに限った話ではありませんが、関数はオーバーロードできません。デフォルト引数があるからうまく使いましょう。親クラスのコンストラクタは明示的に呼ばれないこれ、一番衝撃的だったかもしれない。Javaの世界じゃ親クラスあっての子クラスなので、親クラスが正しく初期化されないと子クラスが存在できません。親が初期化されない状態で子インスタンスが存在できるというのは衝撃的でした。失敗を表す戻り値falsePHPでは処理の失敗を表す戻り値としてfalseがしばしば用いられます。正常終了なら文字列を返すのに失敗するとfalseを返すなんて、Javaの感覚で聞くと心臓がハカハカしてしまいますが、そういうもんなんですね。配列は値渡しJavaでは配列を引数に渡すとそれは参照渡しになります。渡した先で配列を呼び元の配列に影響します。PHPの標準では値渡しなので呼び元の値には影響をあたえいません。callFunc(&$array)のように関数定義時に引数の前に&をつければ参照渡しになります。値渡しだとなんとなく性能のネックになりそうな気がするけど、あまり気にしなくていいのかなぁ→あまり気にしなくていいらしいです(コメント参照)byte型がないphpでバイト処理を行うときは文字列型の変数を使います。packやunpackと言った関数を駆使してバイナリの海を泳ぐようです。なれないとなかなか難しいです。文字列の内部エンコーディング文字列周りなので次はこちら。Javaの文字列は中身はUTF-16で持っているので単純ですが、PHPの内部エンコーディングは実行環境によって異なるようです。その辺意識してコードを書かないと、すぐに文字化け地獄。相当がないPHPには定数を表す方法がいくつかある。defineやconst。これ、どっちにしてもpublicスコープになっちゃうのよね。クラスの中だけに閉じた定数って作れないんだねー。これ、裏側で例外が投げられていてそれをキャッチすれば適切なハンドラに処理を移譲できるなーとか思ってたら、こいつはキャッチできない。代替法があるようだが、はじめはびっくりした。getSession(false)がないここからはJavaEEのSessionのはなし。PHPにはgetSession(false)相当の処理がない。「セッションが開始されてなかったら」という処理を書くのにちょっと工夫が必要がでした。セッションにオブジェクトは格納できないセッションには文字列か数字しか乗りません。→正しくは「参照型を格納できない」なので「文字列か数字しか乗らない」正確ではありませんでした。オブジェクトや配列をセッションに載せる場合はserializeしてから格納する必要があります。取り出すときはunserializeします。セッションCookieの有効期限は自動的に伸びないPHPでもセッションの有効期限を決めることができます。ここで決められる有効期限はセッションスタートしてからの時間なのです。セッションの有効期限は30分だとします。時刻0でセッションを作成しました。時刻10分で再び画面にアクセスしたとき、Javaならこの時点でセッションの有効期限はそこから30分伸びます。タイムアウトの時間は時刻40分ですしかし、PHPのCookieは伸びませんあくまで最初に決めた時間にタイムアウトするのです。Javaに似たセッション戦略にするには少々工夫しなければなりませんこちら、ちょっと根本的に理解が間違ってる可能性があるので調査してから編集しますセッションを消してもCookieは消えないphpではsession_destroy関数を使ってセッションを破棄できます。これで消えるのはサーバ側のセッションデータのみでブラウザ側のセッションクッキーは残ってしまいます。セッションを消すときは、サーバー側のセッションデータ破棄→ブラウザのcookie削除という手順を踏まなければなりません。Notes最後なのできにいった部分を。Notesといって実際のユーザが書いたTipsとかが読めるようになってます。この文化は羨ましいなぁとおもいました。requestStockLike36@tatesuke「かんたんMarkdown」というMarkdownエディタを作っていました。Python辺りに生息。楽をする仕組みを考えるのがすき。考えているそのときが楽しい。upLoginユーザーは見つかりませんでした。