新しいブログに移動しました。「9ensanのLifeHack」こちらの記事も必要に応じて新しいブログに移動させる予定です。今後ともよろしくお願い致します。10:54PHPPHPクラスとオブジェクトについて学んでいきます。クラスPHP5のクラスの定義は次のような書式を持っています。クラス定義の本体}書式からも抽象クラス、継承、インターフェースをサポートすることが、わかります。クラス定義の中身にはオブジェクトがもつ変数であるプロパティ、関数であるメソッドを定義します。演算子でオブジェクトを生成します。生成したオブジェクトのプロパティやメソッドにアクセスするには、$this->var$obj->getVar()のように「->」を利用します。$thisという変数はオブジェクト自身を表す特別な変数です。プロパティオブジェクトは、プロパティと呼ばれるオブジェクト内に保持する変数を定義できます。キーワードを使用して可視性を指定できるようになっています。PHP4との互換性のためにvarも使用できますが、PHP5のオブジェクトではvarを使用するべきではありません。varをPHP5で使用した場合、publicを指定したのと同じ扱いになります。PHPのクラスのプロパティはデフォルト値を設定できます。デフォルト値は定数である必要があります。(PHPのコンパイル時に評価できる値でないといけないからです)なので、関数からの戻り値などは、プロパティのデフォルト値として利用できません。$c;}?>staticキーワードを使用するとオブジェクトを生成しなくてもプロパティ/メソッドを参照できるようになります。クラスやオブジェクトのプロパティ/メソッドの参照を指定するためには、”::”スコープ解決演算子を使用します。SimpleObject::$a;?>クラス定義内では、クラス名にself、parentという特別なクラス名が利用できます。self、parentは小文字でないといけません。親オブジェクト(継承元)をいっみするクラス名self、parentを使用してクラス内のプロパティ/メソッドにアクセスした場合、static宣言していない場合、エラーとなってアクセスできません。self::文を使用してオブジェクト内のプロパティやメソッドにアクセスすることもできますが、普通オブジェクト自身のプロパティにアクセスするには、オブジェクト自身をさす特別な変数"$this”を使用します。$thisを使用するには、オブジェクトはインスタンス(newを使って生成されたオブジェクト)でないといけません。値が変更できない定数をクラス内に定義することができます。クラス内で参照する定数については、クラス外部で定義するよりもクラス内定数として定義することで、定数の意味合いが視覚的にもわかりやすくなります。演算結果あるいは関数のコールなどであってはいけません。持たせることもできます。以降で対応?>メソッドメソッドとは、オブジェクトがデータ操作などに必要とする手続きを定義した関数です。メソッドは通常の関数と同じように定義できます。プロパティと同じようにメソッドにも可視性を指定できます。//出力結果なし?>$thisは、オブジェクト自身を参照する特別な変数です。オブジェクト自身のプロパティやメソッドにアクセスする場合に$this変数を利用します。$thisは特別な変数の為、上書きするとエラーが発生します。(PHP4まではエラーは発生しません)特別な意味をもつメソッドが定められています。それは、オブジェクト生成時に自動的に呼び出される関数や、オブジェクト消滅時に自動的に呼び出される関数などです。以下に特別なメソッドの一覧になります。cloneステートメントが呼び出された時に呼び出される関数コンストラクタオブジェクトを生成する際に、オブジェクトを初期化するコードを記述するメソッドのことをコンストラクタといいます。コンストラクタは、定義されていなくてもかまいません。「TEST」を出力?>PHP5では、___construct()をコンストラクタとして使用します。継承を利用している場合、親クラスのコンストラクタは自動的には呼び出されません。親クラスのコンストラクタを呼び出す為には、明示的に呼び出す必要があります。PHP4ではクラス名と同じ名前を持つメソッドがコンストラクタとして扱われます。PHP5でも互換性を持たせる為に、クラス名と同じメソッド名をコンストラクタとして利用できます。__construct()をコンストラクタとして使用するほうがいいでしょう。デストラクタオブジェクトが消滅する際に、自動的に呼び出されるメソッドのことをデストラクタといいます。デストラクタは、定義されていなくてもかまいません。called」と出力されます。?>PHP5では、___destruct()をデストラクタとして使用します。継承を利用している場合、親クラスのデストラクタは自動的には呼び出されません。親クラスのデストラクタを呼び出す為には、明示的に呼び出す必要があります。デストラクタは、PHP5からサポートされました、ですのでPHP4では使用することはできません。継承とは、あるクラスの機能を引き継ぎながら、既存のプロパティ/メソッドを上書きしたり、あらたなメソッドを追加することを言います。extendsキーワードを使用することで、指定されたクラスを継承するこtが可能になります。継承してできたクラスをサブクラス(子クラス、派生クラス)と言い、継承元のクラスのことをスーパークラス(親クラス、基底クラス)と言います。継承の世代数に制限はありませんが、複数の親クラスからの継承(多重継承)はサポートされていません。継承を利用することで、コードの再利用性を高めることができます。親クラスのtriangleメソッドを実行した結果が得られます。子クラスのsquareメソッドを実行した結果が得られます。出力結果:「20」?>オーバーライドオーバーライドとは、親クラスに存在するプロパティ/メソッドと同じ名前のプロパティ/メソッドを子クラスで再定義することをいいます。オーバーライドされたプロパティ/メソッドは明示的に親クラスのものを参照する意味をもつ「parent」を使用して参照することができます。オーバーライドしたプロパティ?></pre>実行結果)カプセル化オブジェクト内部のプロパティを隠し、公開されたメソッドのみを利用してアクセスできるようにすることです。Java、C++などの多くのオブジェクト指向型のプログラミング言語がもっている考え方と同様です。非公開:同じクラス内からのみ参照可能これらのキーワードは、クラス内のプロパティ/メソッド共に利用可能です。メソッド宣言の可視性キーワードは省略できます。宣言されたことと同等になります。静的なプロパティとメソッド関数に性的な変数を定義するstaticキーワードはプロパティとメソッドにも使用できます。静的なプロパティ/メソッドとは、インスタンス(newを使用してオブジェクト生成すること)を生成しなくてもプロパティやメソッドが初期化/使用できるものの事を言います。静的なプロパティとメソッドはインスタンスなしに利用できます。method)抽象クラスとは、インスタンスを作れないクラスです。抽象メソッドとは中身の定義がなく、子クラスが必ず中身を定義しなければならないメソッドのことです。abstractキーワードを利用して抽象クラス、抽象メソッドを作成できます。抽象メソッドを持つクラスは、必ず抽象クラスとして定義されなければなりません。抽象メソッドを持つクラスを継承したクラスは、必ず全ての抽象メソッドを実装しなければなりません。抽象メソッドを実装するメソッドは引数の数も一致していなければなりません。インターフェースインターフェースとはクラスが定義すべきメソッドを指定する仕組みです。インターフェース定義自体はメソッドが何をするのか定義する必要はありません。クラス定義にメソッドの実装を強制する抽象クラスとにています。抽象メソッドと同じでインターフェースで定義されているメソッドは全て実装しなければなりません。引数の数も抽象メソッドと同じく一致している必要があります。通常のクラスやメソッドは、自由に拡張できますが、クラスライブラリを作成する場合、拡張を制限したい場合もあります。クラスの継承を制限したり、メソッドのオーバーライドを制限するためにfinalキーワードが用意されています。}}final宣言されたクラスはどのような場合でも継承元になることはできません。final宣言されたメソッドを持つクラスは、クラス自体がfinal宣言されていなければ継承元の親クラスとなれますが、finalメソッドはオーバーライドできません。オブジェクトの比較オブジェクトの比較を行った場合、”==”はオブジェクト名/プロパティの値が同じか比較しTRUE/FALSEを返します。”===”は、オブジェクトハンドルが同じ場合にのみ一致したと判断されます。(PHP4では、”==”も”===”も判断は、オブジェクト名/プロパティの値が同じかどうかで判断されます)オブジェクトのクローンオブジェクトは、代入演算子"="では、コピーできません。(オブジェクトハンドルの代入になります)オブジェクト型のコピーを作成したい場合は、clone文を使用します。false?>オブジェクトのクローンを作成する際は、PHPはプロパティをありのままこぴーします。オブジェクトハンドルはハンドルとしてコピーされます。他の変数への参照も、参照のままコピーされます。このようなコピーでは困る場合は、明示的にコピー方法を指定できます。オブジェクトにclone文が使用された場合、__cloneメソッドが定義されていると__cloneメソッドで定義された手順でオブジェクトがコピーされます。}オートロードクラス定義が行われていないクラスをインスタンス化しようとした場合、自動的にファイルを呼び込む機能PHP5でプログラム中に未定義のクラス名があると、クラス名を引数として自動的に__autoload関数を呼び出します。__autoload($クラス名);__autoload関数が定義されていない場合や、__autoload関数を使用してもクラス定義が見つからない場合は、未定義のクラス名を使用されたことになり、エラーとなります。__autoloadのエラーはcatch文でキャッチできないので、注意が必要です。解りやすく1頁にまとめていただきありがとうございます。PHP5の勉強をさぼっていたので、とても勉強になりました。どのページも読んでいて楽しくためになります。ありがとうございました。返信コメントを書くコメント投稿フォームコメントを入力して下さい。返信をキャンセルする。2011/05/06読書用に花粉症対策CodeIgniterでのCLIPHPでの正規表現のチェックが出来るサイトiPhoneシミュレータのアプリの保存先httpd.confのOptionsの備忘録zencodingって便利だ!wp-super-cacheが悪さしていた・・・。