PHP で少しはまったところをメモしておく試み (2008.02.15)
- 2008.02.15 Friday
- dev
エラーを無視する
関数の前に「@
」をつけます。
$fh = @fopen('dummy.txt','r');
@include('mylibs.php');
この時につける接頭子「@
」は、エラー演算子という呼ぶようです。
エラー処理を行う
エラー処理を行う関数として、set_error_handler
が用意されています。
set_error_handler
が呼び出された後、エラーが発生した場合、set_error_handler
で登録した関数でエラー処理が行われます。
perl では、エラー処理を行うため eval
ブロックを利用すると、該当ブロック内のエラーを捕捉できます。ブロック外のエラーは捕捉されません。
一方、set_error_handler
が一度呼び出されると restore_error_handler
を使ってエラー処理を解除するまで、エラーを捕捉し続けます。
<?php { // here is eval block set_error_handler('myErrorHandler'); // : restore_error_handler(); } // end of eval block function myErrorHandler() { // do something ... } ?>
エラー処理にオブジェクトのメソッドを指定する
set_error_handler
で文字列を使うと、該当する名前を持つ関数をグローバルに呼び出します。
エラー処理として、インスタンス $this
のメソッドを呼び出したい場合は array
を使って関数を引き渡す必要があります。
<?php class Hoge { function Hoge() { set_error_handler(array($this,'handle_error')); // : restore_error_handler(); } function handle_error { // do something ... } } ?>
クラスメソッド
インスタンスを生成せずに、クラスに定義されたメソッドを呼び出すには、「::
」を使います。
「クラス名::メソッド名
」のように呼び出します。これは perl と一緒。
<?php class SomeClass { function classMethod() { // do somethimng ... } } SomeClass::classMethod(); ?>
継承
extends
でベースクラスを指定します。
ベースクラスのメソッドを呼び出す時は、予約されている parent
というクラス名を使います。
<?php class SomeClass extends BaseClass { function SomeClass() { parent::__construct(); } } ?>
コンストラクタ
クラス名と同じ名前の関数を定義すると、コンストラクタになります。C++ っぽい流儀です。
php5 では、__construct
という関数がコンストラクタとして利用できます。__construct
を定義しておけば、自動的に呼ばれるようです。
php4 / php5 共用で利用する場合、以下のようなコードがサンプルとして挙げられています。
<?php class SomeClass { function SomeClass() { $this->__construct() } function __construct() { // do initialization } } ?>
配列を返す関数
split
や explode
など配列を返す関数がいくつかあります。
perl の場合、配列を返す関数に対して、
my $var = ( some_func() )[0];
のようにブラケットで囲むことで、返り値の配列を無名配列として扱い、添字を使って配列の一部の要素だけを抜き出すことが出来ます。
PHP の場合、無名配列という概念がないようなので、上記の場合、
$var = array_shift( some_func() );
のように記述する必要があります。
先頭の要素だけ利用する場合ならば、array_shift
でいけますが、途中の要素を抜き出したい場合は、一時変数を使う必要がありそうです。
スポンサーリンク