RFC822.php

以前自力実装を諦めた「メールアドレスの正当性の確認と実メール部の取り出し」をPEARにやってもらうべく、該当するクラスのファイルを取り出して眺める・・・前に「RFC822って、すでに2822に変更されているのではないのか?」とか思ってしまった。でも、「RFC2822.php」なるものはなさそうなので、とりあえずはこれなのか。
それにしても検索にはほとんどこのファイル名は引っかかってこないなぁ。日本語にするとPEARのドキュメントすら出てこない。「Mail_RFC822」(クラス名)で検索するべきなのか。->たくさん出てきた。
でも結局ソースファイルを読んでいるわけですが・・・RFC822クラスの関数は静的呼び出しをすることになっているのにソース内を見るとなぜか$thisが使われている。よくソースを見ると途中で、$thisが!isset()な時にnew Mail_RFC822をするというコードが。こんな風にするぐらいなら「静的呼び出し不可」にすればいいのに、と思った。
・・・_splitCheck()の内容が若干疑問。「閉じていないクォーテーションがないか」「閉じていないブラケットがないか」をばらばらにチェックしているのだが、本当はそれぞれの入れ子関係が正しいかもチェックしなければならないような気もする。ブラケットの閉じ部分がクォーテーションで括られているとアウトだと思うし。この辺のゴタゴタを処理しきれなくて自前の実装を諦めた気もするのだが。
入れ子関係をチェックするには文字列を最初から一文字ずつスキャンして、(1)「開始符号グループ」に一致するものがあればスタックに積んで、(2)スタックの一番上の開始文字に対応する終了文字見つけたらスタックから取り除くという処理をおこない、最後にスタックが空ならOKという処置をしなければいけないような気がする。いや、一部の「開始文字」は「終了文字」になるので終了文字のチェックの方が先か。・・・頭がいない(笑)