try、throw、catch・・・PHP5の例外処理

2008/02/03 | マイPHPメモ

PHP4も今年で終焉を迎えるので、近頃はあせりつつPHP5を勉強中。
といっても、たいていの場合今まで使っていたプログラムは動きそうなので、追加された機能を勉強している、といったところ。
PHP5になって例外処理ができるようになったとのこと。今までは「プログラム内にコーディングしてたから、いらないんじゃないの?」とか思ったけど、少し勉強してみると、確かに便利なのかもしれない。
基本的な構文はこんな感じ。

try{
  //処理を実行
  //エラーが出たらthrowしてcatchへジャンプするよう宣言
  if(エラー){throw new exception(‘エラーメッセージ’);}
  //エラーじゃなかった場合の処理を続行
  //エラーが出たらthrowしてcatchへジャンプするよう宣言
  if(エラー){throw new exception(‘エラーメッセージ’);}
  //エラーじゃなかった場合の処理を続行
  //処理完了
}catch(exception $e){
  echo $e->getMessage();
}

ここでexceptionというのは、あらかじめそういう名前のクラスが定義されているらしい。場合によってはexceptionクラスを拡張したものも使うらしい(使い方まだわかんないけど)。catchできない例外が投げられたらエラーらしい(そりゃそうだろう)。catchできない例外って・・・それはプログラムの書き手が自分で管理する部分・・・だな。それよりも、結局はエラーのパターンを想定してやることのほうが大事か・・・。疑問は尽きない。

ただ個人的には今まで手作業でやっていたところの書き方が変わるだけの感じ。まだなじめない。でも他のプログラム言語ではこれが一般的なわけで、徐々に慣れていかざるを得ないだろう。
何事につけても、現状で満足しているやり方を、新しいやり方に変更するのは気が重いものだと痛感・・・。

PHPスクリプトの文字コードSJISはOK?・・・わかりやすい説明

2007/11/04 | マイPHPメモ

スクリプトの文字コード問題、MLで大変わかりやすい説明をしていただいた。

mbstring.internal_encoding
mb_convert_encoding()の第三引数のデフォルトとして使われるものであって、スクリプトの文字コードを指定するものではない。

mbstring.script_encoding
スクリプトの文字コードを指定するものではあるが、使用できるのはPHPが–enable-zend-multibyteでコンパイルされている場合のみ。だから–enable-zend-multibyteが指定されていない環境では、やっぱりスクリプトの文字コードにシフトJISは使っちゃいけない。

うんうん。すごくわかりやすい。説明ありがとうございました。
やっぱダメなんじゃん、SJIS。

結局Shift_JISでPHPのプログラムは書いてもいいのか

2007/11/03 | マイPHPメモ

PHPのMLを見て再燃。シフトJISでPHPのプログラムを書いてもいいのか。

自分としては以前の記憶で「–enable-zend-multibyteが有効でないときはNG」ということでスクリプトをシフトJISで書くことはなかった。しかしPHP-MLを見て疑問が再燃。「PHP-users 32796」で大丈夫との発言がある。そのメールに書かれたPHP-devのスレッドを読んでは見たのだが・・・一回見ただけでは理解できなかっった・・・。
http://ml.php.gr.jp/pipermail/php-dev/2003-May/thread.html#761

何をもって「使えるか」、というのも難しい議論だ。先のスレッドで「substr関数でマルチバイト文字はバイト数を意識しないと使えない」というのがあったが、それと「シフトJISのPHPスクリプト中で能や表なんて文字がNG」という議論とはちょっと違うような気がする。それとも雲の上の人たちが考えていることというのは、一般プログラマの思考回路とはレベルが違うのだろうか・・・。

ちなみに今、使っているサーバでPHP4.3.2な環境がある。CentOS4.2とかならこの環境の人もいるんじゃないか?。セキュリティアップデートかけているだけならPHPのバージョンはかわらないから。

上記の環境でhtaccessでinternal_encoding、script_encodingにSJISを設定して以下のスクリプトを実行した(スクリプトはSJISで保存)。
print(“表”);

結果はエラーだった。やっぱ使えないじゃん。結局やっぱり「zend multibyte」が有効なんじゃないとダメなんじゃないの〜?。「zend multibyte」が有効なレンタルサーバがどれほどあるっていうんだぁ?。

これ、誰か詳しく解説してほしい。
php.iniのマルチバイト関連の設定も含めて、どのバージョンからどのように設定したらSJISが使えるようになるのか。

まぁ、自分はUTF-8で書くけどね。

既存のシステムに機能を追加する時に

2007/10/24 | マイPHPメモ

以前、クラス(オブジェクト)を読むのにget_parent_classをはじめとする便利な関数を紹介した。現在WordPressで遊んでいるのだが、実はいろいろと厄介。あらかじめ用意されている出力用関数では物足りないのだ。
で、いろいろ分岐処理をしたい。きっとシステム(WordPress)側で変数としていろんなのを保持しているはずだろうから、そこから判別しようと考えた。で、やらなければいけないのは、定義された変数をすべて取得し、使えそうなものをピックアップする、という作業だ。
PHPに便利な関数があった。

get_defined_vars

定義された変数が配列形式ですべて返される。
この関数を使うと、当然のことながら、大量の変数が吐き出される。最初から読んでいくときりがないので($_SERVERとか$_GETとかから始まってしまうので・・・)、後ろから読むのがおすすめ(普通の変数は後ろのほうにある)。

まぁ、大量に出てくるわけで、そこから必要なものを見つけ出すのは大変なのだが、慣れてしまえば便利な関数だ。やっぱり変数名はわかりやすいものをつけておくべきだと思った(だって適当に推測して検索できるから)。

フレームワーク関連本

2007/10/14 | マイPHPメモ
最近PHPのフレームワークに関連する本が多くなってきたのでピックアップしてみた。Ethna、Symfony、Zend Framework、cakePHPと主要なところがそろっているので入門にはお奨めだ。mapleはないけど・・・多分主要ではないということなのか・・・。個人的には現状cakePHPを使ってはいるが、今後のことはわからないので少し買ってみるつもり。
お試しとして「PHPフレームワーク完全マスター」がいいかもしれない。だってZend Framework、cakePHP、Symfonyのおすすめ3点セットみたいな感じだからね。
まずはこれから買ってみるとしよう。

でも、実は個人的に、今後の大規模アプリはEthnaかも、と思っている。もちろん大本命はZend Frameworkで間違いないと思うのだが・・・だ。cakePHPは使いやすいし、mozillaだったかnetscapeだったか、そのあたりの構築実績もあるわけだから、大規模向けでも大丈夫なのだとは思う。
でもGreeの構築実績、というのも大きいし、開発者が日本人てのも大きいのではないかと思う。

さて、やっぱりPHPのフレームワーク、淘汰はされてきたけど、まだまだ先は見えない。情報を持ってる方がいたら教えて欲しい。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net