記載されている内容は2019年03月21日時点のものです。現在の情報と異なる可能性がありますので、ご了承ください。記事に記載されている情報は自己責任でご活用いただき、本記事の内容に関する事項については、専門家等に相談するようにしてください。この記事では、PHPでのクラスについての解説と、クラスで利用されるメソッドや概念の紹介と解説を行っています。応用的な内容なので、理解するためにはクラスの基本的な知識が必要です。理解して、PHPエンジニアとしてレベルアップを図りましょう。シェアツイートはてブ目次PHPのクラスとはPHPにおけるクラスの使い方と関連メソッドまとめPHPのクラスとはhttp://php.net/images/logos/new-php-logo.pngPHPにおけるクラスとは、ある概念のデータと処理をまとめたモジュールのことを言います。クラスには、プロパティ(変数、定数)とメソッド(関数)の定義を行います。あらゆるプログラミング言語でクラスは利用されます。クラスは、PHPプログラミングでは以下のように記述されます。メソッド名(){//処理}}また、クラスをPHPプログラム中で実際に利用するにはインスタンスを生成する必要があります。インスタンスとは、クラスをもとに生成した実体データです。インスタンスは以下のようにして生成します。クラス名();クラスで定義したプロパティやメソッドにはインスタンスから以下のようにアクセスします。//メソッドアクセスPHPにおけるクラスの使い方と関連メソッドここからは、実際のPHPプログラムのクラスの使い方について解説していきます。以下のサンプルをもとに解説していきます。'ニャー';}}上記のサンプルクラスは、とても簡単な形をしたクラスになります。クラス名は大文字で始めることが多いので覚えておきましょう。各プロパティやメソッドの先頭に記述されているpublicというのはアクセス修飾子というもので、どの範囲からこのプロパティやメソッドにアクセスできるかを指定したものです。詳しくはまた別の記事で解説します。このCatクラスを利用するため、インスタンスを生成します。Cat();これで、猫1匹に関するインスタンスが生成されました。次に、このインスタンスに対して名前を設定します。クラスに設定した$nameプロパティに名前を代入します。'tama';これで、猫の名前tamaを設定しました。このcat1インスタンスの名前を取得してみます。//tamaこのように、代入されたプロパティは保存されます。次にメソッドを利用してみましょう。クラスに定義したメソッドを利用するには以下のように指定します。//キャットフードを食べましたこれでCatクラスで定義したeatメソッドを呼び出すことができました。1:クラスの継承(extends)クラスの継承とは、クラス定義の共通部分を別クラスにまとめ、それを利用する仕組みのことです。先程のCatクラスの他に、DogクラスやRabbitクラスを作成する必要があり、さらにその中のプロパティやメソッドで共通のものがあった場合、それを全てのクラスで定義するのは非常に非効率的です。いった時に継承をうまく利用すると、プログラムをスリムに作成することができます。extendsの使い方PHPプログラムで継承を実現するにはextendsを利用します。継承元クラス名{//共通処理}と記述します。ここでは、例としてCatクラスとDogクラスを作成し、その共通部分をAnimalクラスにまとめます。'ワン';}}ここでCatクラスとDogクラスのインスタンスを生成し、nameの保存とeatメソッドの呼び出しをしてみましょう。//ドッグフードを食べましたAnimalクラスに定義したプロパティやメソッドが継承先のクラスであるCatクラスやDogクラスのインスタンスから呼び出すことができました。このように、継承を利用すると共通処理をまとめることができます。2:クラスを抽象化する(abstract)次にPHPの抽象クラスについて解説します。抽象クラスは、継承される前提で作成されるクラスで、継承先のクラス定義に対して規定を与える役割があります。抽象クラスの特徴は以下のようなものがあります。・抽象クラスを継承したサブクラスは、抽象クラスにある抽象メソッドを上書き(オーバーライド)しなければならない・直接インスタンス化できない・PHPでは多重継承が認められていない他にもありますが、まずここをおさえましょう。abstractの使い方PHPで抽象クラスを定義する際には、abstractを利用します。抽象クラス名();}のような形で定義します。抽象クラスには抽象メソッドを定義できます。抽象メソッドとは処理が書かれていない、名前の定義のみの関数です。}は省いて定義します。具体的な使い方を以下に示します。'を食べたニャー';}}まず、抽象クラスであるAnimalAbstractを定義します。そこに抽象メソッドとしてeatメソッドを定義しています。このように定義することで、この抽象クラスを継承したクラスは必ずeatメソッドを実装しなければなりません。実装していない場合はエラーとなります。前項のextendsの際のeatメソッドと異なる部分は、eatメソッドの処理がクラスごとで異なる点です。「eatメソッドは実装してほしいけど、処理はクラスごとに定義してほしい」といった場合に抽象クラスを定義しておきます。抽象クラス内に通常のメソッドも記述できます。抽象メソッドでない場合は、継承先のクラスで定義する必要はありません。通常の継承の時と同じ扱いをすることが可能です。3:クラスのコンストラクタ(__construct)次にPHPのコンストラクタについて解説します。コンストラクタとは、クラスがインスタンス生成された時に起動する関数のことです。クラス名と指定された際に実行する処理を定義する関数になります。インスタンスが生成された時点で取得したいデータなどを取得する際によく利用されます。__constructの使い方PHPでコンストラクタを定義する際は、__constructと記述します。__construct(){//処理}}と定義します。クラス名();の部分で実行されます。引数を取ることもでき、引数を取る際は以下のようになります。クラス名(引数に渡す値);と指定します。具体的な使い方を以下に示します。//tama今回は、nameプロパティへの代入をコンストラクタを利用して行いました。コンストラクタを定義しておくと、必ずその処理は行われるため、思わぬエラーやバグを防ぐことにつながります。今回であれば、nameのデータを必ず設定させるような処理になるため、nameの取得漏れがなくなります。4:クラスで静的メンバを使用する(static)クラスは基本的にインスタンスの形で利用されます。同じクラスから生成されたインスタンスでも、その内部データに関係性はありません。インスタンス毎にプロパティ(メンバ)が割り当てられるからです。状況によっては、あるクラスから生成された全インスタンスが変数を共有したい場合があります。生成されたインスタンスの総数などといった情報です。いった場合に利用するのが静的メンバです。静的メンバを設定するにはstaticを利用します。初期値;}と指定します。この静的メンバ変数をクラス内で呼び出す場合は以下のように記述します。__construct(){self::$メンバ変数名++;};}通常のプロパティをクラス内で呼び出す際は$this->と記述してましたが、静的メンバではself::と記述します。外部から静的メンバを呼び出す際はクラス名::$メンバ変数名と指定します。以下にサンプルコードを示します。//2cat1が生成された時点で、Catクラスのsumには1が代入されます。cat2が生成されると、sumは静的メンバなので、そのまま加算が行われsumには2が代入されます。静的メンバはインスタンスごとに生成されるのではなく、クラス自体に情報をもっているような形になります。インスタンスから静的メンバにアクセスしようとするとエラーとなってしまうので注意して下さい。5:クラス内で定数を使用する(const)次に、クラス内の定数について解説します。PHPプログラミングをしていると、クラスを作成する際に、どこからも変更されないようなデータを定義しておきたい場合がでてきます。そのような場合に利用するのが定数です。定数として定義しておくことで、データを呼び出しやすくなり、また変更されないことが保証されているので安心してプログラムを組むことが可能になります。constの使い方クラス内で定数を設定する際には、constを利用します。具体的には以下のように設定されます。定数値;}なお、constにはアクセス修飾子が付きません。(php7.1.0以降は付けられる)なので、基本的にはどこからでも呼び出すことが可能です。定数を呼び出す際は以下のように指定します。以下にサンプルコードを示します。//ニャーPHPでは定数は慣例的に全部大文字で記述します。定数になにか値を代入しようとするとエラーとなってしまうので注意して下さい。6:例外を指定する(exception)次に例外について解説します。PHPプログラムにおける例外とは、なんらかの原因で正規の処理フローから外れてしまい、そのまま処理を続行することが厳しい状況のことを言います。いった状況になってしまった際は、プログラムを問題なく終了させるため例外処理を行う必要があります。catchとは、例外を捕捉するための仕組みで、tryのコードブロック内で発行されたexceptionはcatchブロックで捕捉されます。具体的には以下のように記述されます。$e){//exceptionが発行された際の処理}なお、Exceptionのコンストラクタは引数をとることができ、例外が生じたさいに発行するメッセージを設定できます。そのメッセージはgetMessage()メソッドで受け取ることができます。$e){//例外処理//$e->getMessage();でExceptionに設定したメッセージを取得できる}以下にサンプルコードを示します。//ゼロ除算}7:クラスのプロパティを取得する(get_class_vars)次に、クラスのプロパティ情報を取得する方法について解説します。クラスのデフォルトで定義されたプロパティと値のリストを取得するにはPHPのget_class_vars関数を利用します。get_class_vars(クラス名)と指定します。戻り値は、[プロパティ名]=>値の連想配列となります。コンストラクタ生成後に設定された値や作成されたプロパティは、get_class_varsでは取得できません。get_class_vars関数が実行された箇所のスコープで取得できるプロパティを取得することができます。get_class_varsの使い方get_class_varsの使い方を解説します。以下にサンプルコードを示します。aaaaa)クラス内部でget_class_vars関数を起動した場合、アクセス修飾子がpublicのものとprivateのものの両方が取得できていることがわかります。クラス外部からget_class_vars関数を起動した場合、publicなプロパティのみ取得できていることがわかります。インスタンス化してコンストラクタにてプロパティ値を変更したものに対してget_class_vars関数を適用させても、クラス定義した際の値が取得できていることがわかります。8:クラスが定義済みか確認する(class_exists)クラスが定義済みかどうかを調べるPHP関数としてclass_exists関数があります。この関数は、動的にクラスを呼び出す際に利用されることが多いです。オートローダーを実装する際にはこの関数を利用して実際に存在するクラスなのかどうかを判定してからロード処理を走らせます。class_existsの使い方class_existsはclass_exists(クラス名)で指定します。クラスが存在すればtrue、存在しなければfalseを返します。以下にサンプルコードを示します。//trueまとめ今回はPHPのクラスについての解説と、クラスを利用するにあたってよく利用するメソッドや概念の紹介をしました。今回紹介した内容は常に利用するものではありません。実装するシステムの全体を考えて利用するべきかを検討するようなレベルのものばかりです。応用的な内容なので、理解するのも大変かと思いますが、これらの概念を踏まえて設計や実装ができるようになるとPHPエンジニアとしては十分な知識をもっていると言えます。この内容を理解して、PHPエンジニアとしてレベルアップを図ってください。file.2:営業マンとして活躍し、海外留学。file.4:独学よりもスクールで。他人と同じことはしない。