ctype関数

Zendのソースを見ているときに見つけたこれらの関数。

今まで正規表現でチェックしてたところに使えるので、メモ。
正規表現でやればいいと思ったりもするけど、慣れない人には
正規表現ってすごく分かりづらい。

だから、こういう関数を使うのはいいと思っています。

ctype_ alnum 英数字
ctype_ alpha 英字
ctype_ digit 数字
ctype_ lower 小文字
ctype_ upper 大文字

Zendのディレクトリ構成

前回の記事で以下のようなディレクトリ構成でやってますって書きました。

web/index.php
lib/models/xxxxModel.php
lib/validates/xxxxValidate.php
lib/dbs/xxxxxDb.php
lib/controllers/xxxxxController.php

そこにコメントをいただき、調べてみたところ、
以下の構成にしたら、Zend_Loader::registerAutoload()を生かせるのかなと思った。

web/index.php
lib/models/xxxx.php
lib/models/Dao/xxxxx.php
lib/models/Validate/xxxx.php
lib/controllers/xxxxxController.php

もともとmodelってのは処理クラスの集合体があることがイメージされているのかも。
そうだとしたら、私は勘違いしてた。
もうちょっと考えてみる。

_autoloadが便利

偶然見つけたメソッド __autoload。
最近までphp4ばかり使ってたので、マジックメソッドには疎いのです。

たまたま見つけたサイトで、マジックメソッドについて読んでみて、
早速__autoloadから試してみました。結果は便利です。

私は、phpでプログラムを新規で作る場合は、Zend Frameworkを利用していますが、
だいたいこんなディレクトリ構造です

web/index.php
lib/models/xxxxModel.php
lib/validates/xxxxValidate.php
lib/dbs/xxxxxDb.php
lib/controller/xxxxxController.php

小規模なものしか作っていないので、この階層分けでなんとかなってます。

そこでindex.phpに以下のように __autoloadを追加したら、
各ファイルで、Zend_Loader::loadClassや、require_onceを
記述する必要がなくなってとても楽です。

function __autoload($className)
{
  if (preg_match("/^Zend_/", $className)){
    Zend_Loader::loadClass($className);
    return;
  }

  if (preg_match("/Model$/", $className)){
    require_once('models/' . $className . '.php');
    return;
  }

  if (preg_match("/Db$/", $className)){
    require_once('dbs/' . $className . '.php');
    return;
  }

  if (preg_match("/Validate$/", $className)){
    require_once('validates/' . $className . '.php');
    return;
  }
}

ふと思ったこと

自分の中から「めんどくさい」という理由で行動を起こさないことを、
0とはまではいかないまでも、半分にすることができるようになったら、
身の回りの中で、ほとんどのことが好転するんじゃないかと思った。

めんどくさいから、楽なように作りかえるとかはいいが、
めんどくさいからやらないってなってしまうことは結構ある。

Zend_Mailで日本語メールヘッダを扱う

以前、https://life.co-hey.com/2008/03/zend-mailfrom.htmlという記事を書きました。

ヘッダーをエンコーディングする際の処理を変更しようという内容でしたが、
今回追記しておいた方がいいなということあったので追記です。

mb_encode_mimeheaderでは、mb_internal_encodingの文字コードと、
mb_encode_mimeheaderの第2パラメタで指定した文字コードが一致しないと
正常に変換されない場合があるようです。

なので、以下ように書いておいた方が無難ですね

mb_encode_mimeheader('"'.$name.'"', 'ISO-2022-JP')

  ↓

$encode = mb_internal_encoding();
mb_internal_encoding('ISO-2022-JP');
mb_encode_mimeheader('"'.$name.'"', 'ISO-2022-JP');
mb_internal_encoding($encode);

久々のクラブはしご

今日は、友達がやっているイベントがいくつもあるので、
数か月ぶり?に3件以上のはしごで遊びます。

・KABUTO – R&Bシンガー どん君のLIVE
・no style – マナベ、アツシとか友達たくさんHipHop中心のパーティー
・Jz Brat – VJ jungjungが久々の夜イベントでVJ参加
・Bar Jam – とても好きなDJ Tackさんのパーティー

どうゆう順番で回ろうか悩み中です。
雨が降り続いたら徒歩で移動。中目黒、渋谷、恵比寿だからなんとかなる。

代官山AIRでは、karizmaがplay!!
これも行きたいけど、狙うは29日の青山Loop。

8月は、ダニーのパーティーでラウンジDJできることになったし、
今年の夏は、かなり充実した時間が過ごせそうです。

今更findParent~

Zend FrameworkのDbテーブルリレーションを使って、初めて親テーブルの
データを取得したんですが、返り値ってZend_Db_Table_Rowなんですね。

子テーブルのデータをとってくるときと一緒で、Zend_Db_Table_Rowsetの
つもりで current() を呼び出してエラーになってしまっていました。

子は複数だけど、親は1つっていう考えになってるんですかね。

ほーって思ったので、メモしておきます。

作っていて楽しいもの

これって何だろう??と考えた。

作ってすぐ動くものはやっぱり楽しい。
どう動かしたいのかというのがはっきりしているときも、
そこに近づいていっているのがわかるから楽しい。

楽しくないときは、あやふやなまま作っているとき。
自分が何をやりたいかがはっきりしていないときは苦痛ではないけど、
他のところからの指示があやふやな場合は自分でもどれが正しいのか判断しづらい。
その結果が楽しくないって気分につながる。

こう考えてみると、ちょっとずつでも動かしてみるってことは、
自分のモチベーションを保つ上でも大事じゃないか。

Exceptionとか

出張で、家に2週間いなかったのも手伝って、全然更新してませんでした。
その間、初めて業務関係でZend Frameworkをいじれていました。

ある程度の規模のものを作っても全然楽。開発スピードが違う。
特に、ErrorHandler、ErrorControllerを使ったエラー処理は便利。
Exceptionをthrowしておけば、エラーは拾ってくれるし、
Exception内のデータから、エラーの原因も特定できる。
何より、エラーのための処理をソースにあまり書かなくていいから、
可読性がものすごくあがる。これはかなりメンテナンスしやすい!!
Exceptionは、エラー発生ファイル、ライン数、そこまでのトレース情報までわかる。

あと、Smartyの便利さに改めて気づきました。
Smartyから、post、sessionの情報を参照できるのは使うと、手放せません。
まだやったことない方はぜひお試しください。