独自にクラスを実装する - PHP5 プログラミング

PROGRAM


独自にクラスを実装する

PHP5 では、独自にクラスを定義して利用することができるようになっています。

クラスの定義

一般的なクラスは PHP タグ内で、次のようにして宣言できます。

class Phone

{

// クラスで使用する属性(変数)を定義します。

public $myNumber;

 

// クラスに定数を持たせることもできます。

const SYSTEM_VERSION = '1.0.0';

 

// クラス構築の際に呼び出されるコンストラクタです。

public function __construct($myNumber)

{

// 自分自身の属性やメソッドを呼び出す際は "$this->" に続けて名前を指定します。

$this->myNumber = $myNumber;

}

 

// クラスが破棄される際に呼び出されるデストラクタです。

protected function __destruct()

{

}

 

// クラスが提供するメソッド(関数)を定義します。

public function call($toNumber)

{

}

 

// インスタンスを作成しなくても呼び出せる静的メソッドです。

static public function systemVersion()

{

// 自分自身の定数や静的メソッドを使用する場合は "self::" を付けて指定します。

return self::SYSTEM_VERSION;

}

}

例えばこのようにして、クラス "Phone" を定義できます。

 

属性の定義

最初の変数定義は、このクラスが持つ属性(変数)を定義している部分になります。"private" や "protected", "public" に続けて変数名を記載することで、クラスがこの値を持てるようになります。

この属性をクラス内で使用する場合には、上記の例では $this->myNumber というように、自分自身を示す $this を前に付与する必要があります。これを忘れると、別の一般的な変数として扱われてしまうので注意が必要です。

ちなみに、冒頭についている記号は、"private" ならそのクラス自身だけが内部で利用可能な属性を、"protected" ならそのクラスを派生した先のクラス内からも利用可能な属性を、"public" ならそのクラスを構築したインスタンスへアクセスできる誰もが利用可能、という意味合いを持っています。

 

定数の定義

プログラム内で値を変更しないものは "定数" として定義することで、プログラムの可読性や保守性が高まると思います。

PHP5 ではクラスに定数を持たせることができるので、このクラスに関係する定数であれば define ではなく const で定義することで、よりプログラミングにしっかりとした意味を持たせることができると思います。

 

クラス内に定義された定数は、次のようにして参照することが可能です。

echo Phone::SYSTEM_VERSION;

クラス名に続けて "::" を打ち、次いで定数名を指定することで、その値を参照することができます。

この定数を自分自身のクラス内で使用する場合には、self::SYSTEM_VERSION というように、クラス名の所を "self" とすることができます。

 

メソッドの定義

それ以下の部分では、このクラスが持つメソッド(関数)を定義しています。

基本的には PHP5 の通常の関数と同じ感じで自由に定義できますが、冒頭に "public", "protected", "private" といったアクセス識別子を指定する必要があります。

また、上記の中で "__construct" や "__destruct" という関数は、PHP5 であらかじめ決められている特殊なメソッドになります。

クラスを利用する際には new 演算子を用いて "インスタンス" を構築する必要があるのですが、"__construct" 関数は、その構築時に呼び出される初期化関数です。逆に "__destruct" は、そのインスタンスが破棄されるタイミングで呼び出される初期化関数になります。

 

静的メソッド

メソッドの中には、冒頭に "static" を付けて、静的メソッドとして定義する場合があります。

静的メソッドというのは、クラス内の属性の値に依らずに処理を行うことのできる関数です。例えばシステムバージョンを取得するとか、単純な変換処理を行うメソッドを実装する場合など、場面に応じて定義すると、便利になるように思います。

 

クラスを使用する

上記のように定義したクラスをプログラム内で使用する場合には、次のようにしてインスタンスを作成します。

$obj = new Phone('090-xxxx-xxxx');

このようにすることで、クラス Phone のインスタンスが生成されます。

生成の際にひとつ引数を渡していますが、これは、初期化の際に呼び出されるコンストラクタ (__construct) の定義が、引数ひとつを採るように実装してあるためです。

このようにインスタンスを作成したら、次のような感じでインスタンスを操作することができるようになりました。

echo $obj->myNumber;

$obj->call('080-xxxx-xxxx');

このように、インスタンスを格納した変数 $obj に対して、"->" という記号を使い、public 指定した属性やメソッドにアクセスするという流れになります。

ちなみに、クラスを定義する際に使用していた "$this" というのは、自分自身のインスタンスという意味です。

 

なお、クラス内の定数や静的メソッドを呼び出す場合には、インスタンスを作成しなくても、次のようにして呼び出すことが可能です。

echo Phone::SYSTEM_VERSION;

echo Phone::systemVersion();

クラス名に "::" を挟んで、定数名や静的関数を呼び出します。


[ もどる ]