PHPでのオブジェクト指向プログラミングを少し勉強してみた

はじめてのPHP5プログラミング エキスパート編っていう本を研究室から借りて読んでいます。
Amazonでは難しいと評判が悪いですが、評価した方がオブジェクト指向プログラミングを理解していないからだと思われる。この本一冊でオブジェクト指向プログラミングを覚えることは難しく、あらかじめオブジェクト指向プログラミングを理解している人がPHPでどうやってオブジェクト指向プログラミングを組むのかなぁ、と勉強する程度が良いと思う。パラパラと見たところオブジェクト指向プログラミングに始まり、PEARSmarty、ユーザ認証とアクセス制御、セキュリティ、エラーと例外処理などなど色々書かれているので幅広く学ぶ上に良い書籍なのかと思いました。

クラスファイルの読み込み

クラスを別のファイルで作った場合はクラス定義の読み込みが必要になる。
使う関数は
require_once('');
引数の中にクラスファイルを入れる。


クラスファイルの名前は
Circle.class.php
このように.phpの前に.classを付ける。

メソッド、プロパティの呼び出し方

オブジェクトのメソッドを呼び出す場合

  • >

を使う。(Javaでいうところの.みたいな感じ。)


例えば、circleというオブジェクトのgetDiametar()メソッドを呼び出したい場合は、
$circle->getDiametar();
このようすにすればよい。

コンストラクタ、デストラク

コンストラクタの宣言は
__constract() *1
Javaの場合はクラス名と同じ)


デストラクタの宣言は
__destruct()
Javaにはデストラクタは存在しない)

__set()、__get()メソッド

PHPでは変数の宣言をしなくても、変数を作成することができる。しかしこれのせいで(間違えて)存在しないプロパティに代入を行うと、新たにそのプロパティが生成されてしまう。これはオブジェクト指向情報隠蔽の概念から見ると非常に良くない。そこで、その問題を解決するために存在するのが、__set()メソッドと__get()メソッドである。__set()メソッドは、存在しないプロパティに値を設定しようとした時に呼び出されるメソッド。__get()メソッドは、存在しないプロパティの値を参照しようとしたときに呼び出されるメソッド。つまり、この二つのメソッド内に例外処理を書くことになる。

オブジェクトの比較。'=='と'==='

オブジェクトの比較には'=='と'==='の二つの等値演算子があります。'=='は、同じクラスに属するオブジェクトで、プロパティの値がすべて一致するときに成功します。'==='は、同じオブジェクトを参照している時にのみ成功します。




以上、今日学んだことをJavaとの違いを中心にまとめました。

*1:このブログの書式では見にくいがアンダーバー(_)が二つ続いて書かれている