クラスとオブジェクト

 PHPには、C++言語のようなクラスオブジェクトという機能があります。PHPでのクラスはそれ程難しくはないみたいですよ(^。^)

クラスとオブジェクト

 クラス(Class)は、変数及びこれらの変数で動作する関数を1つに集めたものです。では、まず以下のプログラム例を見て下さい。

<?php
class Hello_class {
  var $name = "Yamada";
  function SayHello ( ) {
    print "こんにちは、" . $this -> name . "さん。";
  }
}
 
$obj1 = new Hello_class ( );
$obj2 = new Hello_class ( );
 
$obj1 -> name = "Suzuki";
 
$obj1 -> SayHello ( ) . "<BR>";
$obj2 -> SayHello ( );
?>
▼実行結果
こんにちは、Suzukiさん。
こんにちは、Yamadaさん。

 このプログラムでは、まずHello_classと言う名前のクラスが定義されています。クラスの中身は、変数$nameに"Yamada"と言う値が代入されて、SayHello ( )関数によって"こんにちは、***さん。"と出力されています。クラスはそのままではプログラム中で利用する事ができませんので、new演算子を使ってインスタンス(Instance)化しています。$obj1$obj2は、クラスHello_classをインスタンス化したオブジェクト(Object)です。

プロパティとメソッド

 上のプログラム例のように、オブジェクトは名前を変えていくつでも作る事が出来ます。ここでは$obj1と$obj2と言うオブジェクトを作っています。Hello_classにはname変数があるので、それを"->"演算子を使って変更しているのが以下の部分です。

$obj1 -> name = "Suzuki";

 ところが、$obj1と$obj2は別々のオブジェクトなので、$obj1の変数nameが変更されても、&obj2の変数nameは元のままです。その為、出力において$obj1のnameは"Suzuki"ですが、$obj2のnameは"Yamada"のままです。このように、クラス内で定義された変数をプロパティ(Property)と呼びます。

 又、クラス内には関数も作る事ができますが、この関数をメソッド(Method)と呼びます。この関数についても、以下のように"->"演算子を使って呼び出す事が出来ます。

$obj2 -> SayHello ( );

thisについて

"this"は、上のプログラム例にあるように、インスタンス化されたものを表します。つまり、「$this -> name」は自分自身を指している訳です。

コンストラクタ

 クラス内でクラス名と同じ名前のメソッドをコンストラクタ(Constructor)と呼びます。コンストラクタは、オブジェクトのインスタンスを作成する際に自動的にコールされます。よく変数を初期化する場合に利用します。以下にそのプログラム例を示します。

<?php
class Hello_class {
  var $name;
 
  function Hello_class ( $in = "Yamada" ) {
    $this -> name = $in;
  }
  function SayHello ( ) {
    print "こんにちは、" . $this -> name . "さん。";
  }
}
 
$obj1 = new Hello_class ( "Suzuki" );
$obj2 = new Hello_class ( );
 
$obj1 -> SayHello ( ) . "<BR>";
$obj2 -> SayHello ( );
?>
▼実行結果
こんにちは、Suzukiさん。
こんにちは、Yamadaさん。

継承

 クラスにはもう1つ強力な機能があり、それを継承(Inheritance)と呼びます。では、以下に実際のプログラム例を見てみましょう。

<?php
class Hello_class {
  var $name;
 
  function Hello_class ( $in = "Yamada" ) {
    $this -> name = $in;
  }
  function SayHello ( ) {
    print "こんにちは、" . $this -> name . "さん。";
  }
}
 
class Hello_class2 extends Hello_class {
  function SayHello ( ) {
    print "あなたは誰?";
  }
}
 
$obj1 = new Hello_class2 ( "Suzuki" );
$obj1 -> SayHello ( );
?>
▼実行結果
あなたは誰?

 上のプログラムでは、Hello_class2の中でHello_classのメソッドと同じ名前のメソッドSayHello ( )が定義されています。このように同じ名前のメソッドが定義されている場合は、オーバーライド(Override)されてHello_class2の方のメソッドが有効になります。それ以外のプロパティ、メソッドは継承されたままです。

 PHP4では、子クラスから親クラスのメソッドを呼び出せるようになりました。書式は以下の通りです。(とってもC++ライクですねー)

親クラス::子クラス

これは、オーバーライドされたメソッドでも有効です。以下にそのプログラム例を示します。

<?php
class Hello_class {
  var $name;
 
  function Hello_class ( $in = "Yamada" ) {
    $this -> name = $in;
  }
  function SayHello ( ) {
    print "こんにちは、" . $this -> name . "さん。";
  }
}
 
class Hello_class2 extends Hello_class {
  function SayHello ( ) {
    print "あなたは誰?---";
    Hello_class::SayHello ( );
  }
}
 
$obj1 = new Hello_class2 ( "Suzuki" );
$obj1 -> SayHello ( );
?>
▼実行結果
あなたは誰?---こんにちは、Suzukiさん。

変数のスコープ 前へ

HOME

次へ 外部から来る変数