TOP比較データ> PHP5版 例外処理

徹底比較!! PHP & Java

第5回:PHP5のオブジェクト指向

著者:ワイズノット  土橋 芳孝   2004/12/17
前のページ  1  2   3  次のページ
PHP5版 例外処理

   つぎに本連載の第3回「PHP4とJavaのオブジェクト指向」で登場した「例外処理」をPHP5で検証してみます。
PHP5版 例外処理
<?php
// file1.txtの処理を実施する
try {

// file1.txtを開く
if(($handle1 = fopen("file1.txt", "r")) == false) {
throw(new Exception(
"file1.txtを開くことができません。"));
} else {
echo "file1.txtを開きました。\n";
}

// file1.txtの内容を表示する
while(! feof($handle1)) {
echo fgets($handle1);
}

// file1.txtを閉じる
if($handle1 != false) {
if(fclose($handle1) == false) {
throw(new Exception(
"file1.txtを閉じることができません。"));
} else {
echo "file1.txtを閉じました。\n";
}
}

} catch(Exception $e) {

echo $e->getMessage()."\n";

// file1.txtを閉じる
if($handle1 != false) {
if(fclose($handle1) == false) {
echo "file1.txtを閉じることができません。\n";
} else {
echo "file1.txtを閉じました。\n";
}
}
}

// file2.txtの処理を実施する
try {

// file2.txtを開く
if(($handle2 = fopen("file2.txt", "r")) == false) {
throw(new Exception(
"file2.txtを開くことができません。"));
} else {
echo "file2.txtを開きました。\n";
}

// file2.txtの内容を表示する
while(! feof($handle2)) {
echo fgets($handle2);
throw(new Exception("エラー発生!!"));
}

// file2.txtを閉じる
if($handle2 != false) {
if(fclose($handle2) == false) {
throw(new Exception(
"file2.txtを閉じることができません。"));
} else {
echo "file2.txtを閉じました。\n";
}
}

} catch(Exception $e) {

echo $e->getMessage()."\n";

// file2.txtを閉じる
if($handle2 != false) {
if(fclose($handle2) == false) {
echo "file2.txtを閉じることができません。\n";
} else {
echo "file2.txtを閉じました。\n";
}
}
}

// file3.txtの処理を実施する
try {

// file3.txtを開く
if(($handle3 = fopen("file3.txt", "r")) == false) {
throw(new Exception(
"file3.txtを開くことができません。"));
} else {
echo "file3.txtを開きました。\n";
}

// file3.txtの内容を表示する
while(! feof($handle3)) {
echo fgets($handle3);
}

// file3.txtを閉じる
if($handle3 != false) {
if(fclose($handle3) == false) {
throw(new Exception(
"file3.txtを閉じることができません。"));
} else {
echo "file3.txtを閉じました。\n";
}
}

} catch(Exception $e) {

echo $e->getMessage()."\n";

// file3.txtを閉じる
if($handle3 != false) {
if(fclose($handle3) == false) {
echo "file3.txtを閉じることができません。\n";
} else {
echo "file3.txtを閉じました。\n";
}
}
}
?>

PHP5版 例外処理の実行結果
file1.txtを開きました。
###########################
## file1.txtの内容 ##
###########################
file1.txtを閉じました。
file2.txtを開きました。
###########################
エラー発生!!
file2.txtを閉じました。
file3.txtを開きました。
###########################
## file3.txtの内容 ##
###########################
file3.txtを閉じました。

   上記のとおり、PHP5版の例外処理ではJavaのような例外のハンドリングが可能となっています。そのため機能の境界線が明確になり、コードの再利用性や拡張性を容易に確保できます。コードもPHP4版の例外処理と比較して非常に読みやすいものとなっています。PHP5のtry?catch構文にはfinally節が存在しないため、ファイルを確実に閉じるためにはファイルのクローズ処理を複数記述しなければなりませんが、それでもPHP4と比較するとPHP5の例外処理は大幅に進化したといえます。

前のページ  1  2   3  次のページ



著者プロフィール
株式会社ワイズノット  土橋 芳孝
以前はJavaを利用したWebアプリケーション開発とオブジェクト指向設計を得意としていたが、ワイズノットに入社以来、PHPの魅力にとりつかれる。現在はワイズノットのプロジェクトマネージャーとして、PHPをはじめとしたオープンソースの普及に力を注いでいる。


INDEX
第5回:PHP5のオブジェクト指向
  PHP5版  Singletonパターン
PHP5版 例外処理
  PHP5版 Template Methodパターン