PHPでクラスを使いこなすには?基礎から応用まで解説

PHPでクラスを使う方法が知りたい
クラスの継承や抽象化の意味や使い方がいまいちわからない
PHPのクラスを使いこなせるようになりたい

PHPのクラスは通常のクラスとしての使い方以外に、クラスを継承したり、静的メンバの参照、クラス内で定数を使用する方法など、クラスを使用してさまざまな処理が可能です。

しかし、できることが多すぎていまいちクラスの使い方を理解している方も多いのではないでしょうか?

そこで、今回はクラスとは何か?というところから、実際のクラスの使い方、継承や抽象化などより応用的な使い方についても解説していきます。

この記事はこんな人のために書きました

  • クラスの概要や使い方について知りたい方
  • クラスの継承や抽象化について知りたい方
  • クラスのさまざまな使い方について知りたい方

この記事を読んで、PHPのクラスを使いこなせるようになりましょう!

PHPのクラスとは

クラスとは簡単に説明すると、プログラムの処理をまとめたオブジェクトのことで、あらゆるプログラミング言語でクラスは使用されます。

クラスの中では主に、プロパティ(変数や定数)やメソッド(関数)の定義を記述します。クラスを定義するには、classキーワードを指定し、その次にクラス名を指定します。

クラスの書き方:

class クラス名
{
  //プロパティの宣言
  public $変数名 = 値;
 
  //メソッドの宣言
  public function メソッド名(){
    メソッド内処理...
  }
}

クラス名には予約語以外のあらゆる名前を指定することができます。クラス名の後には波括弧{}のペアを指定して、そのなかにクラスの処理を記述していきます。

PHPなどのオブジェクト指向のプログラミング言語では、クラスを使用するために、クラスのオブジェクトを生成する必要があります。

$クラスオブジェクト = new クラス名();

生成したオブジェクトからプロパティの値を参照したり、メソッドを呼出したりすることができます。

PHPのクラスの使い方

基本的な使い方

ここでは、クラスの使い方を見ていきましょう。以下にclassを使用した簡単なサンプルを記述します。

サンプルプログラム

<?php

class SampleClass
{
  //プロパティの宣言
  public $var = 'This is Sample Class.';

}

//インスタンスの生成
$sample = new SampleClass();

echo $sample->var;

?>

実行結果:

This is Sample Class.

サンプルでは、クラスSampleClassを作成し、その中でプロパティを宣言して値を代入しています。実際にクラスを使用するには、クラスのオブジェクトを生成する必要があるため、「$sample = new SampleClass()」でインスタンスを生成しています。

クラス内のプロパティを参照するには、作成したオブジェクト変数に矢印演算子(->)でクラスのプロパティを指定します。

継承(extends)

クラスのプロパティやメンバを、他のクラスで継承する場合はextendsを指定します。extendsを使用して、クラスを継承するためには、以下のように記述します。

継承の書き方:

class クラス名 extends 継承元クラス名{
  処理…
}

以下にextendsを指定してクラスを継承する方法を記述します。

サンプルプログラム

<?php

//親クラス
class ParentClass{

  public function WorkItem1($str){
    echo $str.'ParentClass <br>';
  }

  public function WorkItem2(){
    echo 'Processing of WorkItem2 of ParentClass. <br>';
  }

}

//子クラス
class ChildClass extends ParentClass{

  public function WorkItem1($str){
    echo $str.'ChildClass <br>';
  }

}

//インスタンスを生成
$parent = new ParentClass();
$child = new ChildClass();

//メソッドの呼出し
$parent->WorkItem1('Processing of ');
$child->WorkItem1('Processing of ');

$parent->WorkItem2();
$child->WorkItem2();

?>

実行結果:

Processing of ParentClass 
Processing of ChildClass 
Processing of WorkItem2 of ParentClass. 
Processing of WorkItem2 of ParentClass. 

このサンプルでは親クラスであるParentClassと、子クラスであるChildClassクラスを定義しています。

ChildClassではextendsを指定して、親クラスのParentClassクラスを継承しています。クラスの継承を指定すれば、子クラスのインスタンスから親クラスのメソッドにアクセスできます。

クラスを継承する方法については、以下の記事で詳しく解説していますので、ぜひ参考にしてくださいね!

抽象化(abstract)

抽象クラスとは他のクラスを継承して使用するためのクラスです。

クラスを抽象化すると、そのクラスは直接インスタンスを生成できなくなります。抽象クラスを使用するためにはabstractを指定する必要があります。

抽象クラスの定義:

abstract 抽象クラス名{
}

抽象クラスには抽象メソッドを定義することができます。抽象メソッドは直接処理を持たない名前だけ定義されたメソッドです。抽象メソッドを定義するには抽象クラスと同じくabstractを指定します。

抽象メソッドの定義:

abstract 抽象クラス名{
    abstract public function メソッド名();
}

以下に抽象クラスを使用したサンプルを紹介します。

サンプルプログラム

//抽象クラス
abstract class AbstractClass
{
    // 抽象メソッドの定義
    abstract protected function getValue();
    abstract protected function getText($str);

    // メソッドの定義
    public function thisClass() {
        echo $this->getValue() . '<br>';
    }
}

class SampleClass1 extends AbstractClass
{
    protected function getValue() {
        return "SampleClass1";
    }

    public function getText($str) {
        return "{$str}SampleClass1";
    }
}

class SampleClass2 extends AbstractClass
{
    public function getValue() {
        return "SampleClass2";
    }

    public function getText($str) {
        return "{$str}SampleClass2";
    }
}

$class1 = new SampleClass1;
$class1->thisClass();
echo $class1->getText('Samurai_') .'<br>';

$class2 = new SampleClass2;
$class2->thisClass();
echo $class2->getText('Engineer_') .'<br>';

実行結果:

SampleClass1
Samurai_SampleClass1
SampleClass2
Engineer_SampleClass2

サンプルプログラムでは通常のクラスのオブジェクトを生成し、オブジェクトから抽象クラスのメソッドを呼出しています。抽象クラスで定義している抽象メソッドは、継承先のクラスで必ず再定義(オーバーライド)する必要があります

コンストラクタ(__construct)

コンストラクタとはクラスからインスタンスを生成するときに、最初に呼び出される関数のことを言います。コンストラクタは__construct()で定義し、newでインスタンスを生成すると必ず実行されます。

コンストラクタの定義:

class クラス名{
    function __construct(){
        …処理…
    }
}

コンストラクタはクラスのインスタンスを生成する度に実行されますので、変数などを初期化する処理でよく使われます。以下にコンストラクタを使用したサンプルを紹介します。

サンプルプログラム

class SampleClass
{
  protected $text;

  //コンストラクタの定義
  function __construct()    {
    $this->text = 'Samurai Engineer';
  }

  //メソッドの定義
  function show() {
    echo $this->text;
  }
}

//インスタンスの生成
$class = new SampleClass();

//メソッドの呼出し
$class->show();

実行結果:

Samurai Engineer

サンプルプログラムではクラスのインスタンス生成と同時にコンストラクタ(__construct)が呼び出され、変数$textの初期化処理を行っています。

そのあとに「$class->show()」でメソッドを呼び出し、変数を参照すると変数に値が設定されていることが分かります。

静的メンバの使用(static)

クラスのプロパティやメソッドなどのメンバを参照するには、new演算子を使用して、クラスのインスタンスを生成する必要があります。

しかし、クラス内でstaticを指定すれば、そのクラスのメンバはインスタンスを生成しなくても、参照することが可能です。

staticな変数を指定するには、以下のように記述します。

静的メンバの定義:

クラス名{
  static $変数名 = 値;
  //処理
}

以下にstaticな変数を定義して、クラス外からインスタンスを生成しないでアクセスするサンプルを紹介します。

サンプルプログラム

<?php
 
class Foo {
 
  //静的変数を作成する
  public static $val = 10;
}
 
//静的変数を参照する
$value = Foo::$val;
echo $value;
 
?>

実行結果:

10

staticを指定して静的メンバを参照する方法については、以下の記事で詳しく解説しています!

定数の使用(const)

クラス内で定数を指定するには、constを使用します。constを指定した定数をクラス内部で定義するときにはconstの後に定数名と値を指定します。

定数の定義:

class クラス名{
 
  const 定数名 = 値;
 
}

以下にconstを使用して定数を指定する方法を紹介します。

サンプルプログラム

<?php

class ConstClass
{
  //定数を定義する
  const CONSTNUM1 = 100;
  const CONSTNUM2 = 200;

  function showConst(){
    echo self::CONSTNUM1.'<br>';
    echo self::CONSTNUM2;
  }
}

$Class = new ConstClass();
$Class->showConst();

?>

実行結果:

100
200

定数を使用する方法については、以下の記事で詳しく解説しています!


【PHP入門】defineで定数を定義する方法
更新日 : 2019年2月12日

例外の指定(exception)

プログラムの実行中に発生する例外を扱うには、try~catch文を指定します。

例外は独自の例外クラスを使用することも可能です。使用するには、Exceptionクラスを拡張します。

例外処理:

try {
    // 例外が発生する可能性のあるコード
} catch (Exception $e) {
    // 例外が発生した場合に行う処理
}

そんな例外クラスの使用方法については、以下の記事で詳しく解説しています!

プロパティを取得(get_class_vars)

クラスのデフォルトのプロパティのを取得するにはget_class_vars関数を使用します。

get_class_vars関数は以下のように記述します。

書き方:

array get_class_vars ( string $クラス名 )

返り値:
現在のスコープから参照できる変数やデフォルト値を連想配列で返します。配列要素は「変数名=>値」となります。エラーが発生した場合はFALSEを返します。

サンプルプログラム
以下にget_class_vars関数を使用して、クラスのプロパティを取得するサンプルを紹介します。

<?php

class sampleclass {

    var $item1;
    var $item2 = "ABCD";
    var $item3 = 100;
    public $item4 = 1000;
    private $item5 = 2000;

    // コンストラクタ
    function __construct() {
        //プロパティを設定する
        $this->item1 = "EFGH";
        $this->item2 = "300";
        return true;
    }
}

$sample_class = new sampleclass();

$class_array = get_class_vars(get_class($sample_class));

print_r($class_array);

?>

実行結果:

Array
(
    [item1] => 
    [item2] => ABCD
    [item3] => 100
    [item4] => 1000
)

先述したようにget_class_vars関数は、実行時のスコープから参照できる範囲の値を取得します。そのため、コンストラクタでプロパティの値を変更してもget_class_varsでは参照できません。

クラスが定義済みか確認する(class_exists)

クラスが定義済みか確認したい場合はclass_exists関数を使用します。

書き方:

bool class_exists ( string $クラス名 [, bool $autoload = true ] )

引数:
第一引数にはクラス名を指定します。クラス名は大文字と小文字を区別しません。
第二引数にTRUEを指定すると、クラスのオートローディングを行います。

オートローディングについては以下のサイトで詳しく解説しています。
http://php.net/manual/ja/language.oop5.autoload.php

返り値:
指定したクラスが定義されている場合はTRUE、指定されていない場合はFALSEを返します。

サンプルプログラム:

class SampleClass1{

  function __construct()    {
    echo 'SampleClass1<br>';
  }
}

if (class_exists('SampleClass1')) {
    $class = new SampleClass1();
}

if (class_exists('SampleClass2')) {
    $class = new SampleClass2();
}else{
  echo 'SampleClass2は定義されていません';
}

実行結果:

SampleClass1
SampleClass2は定義されていません

まとめ

ここでは、PHPで使用するクラス(class)について以下の内容を解説しました。

  • クラスとは
  • クラスの基本的な使い方
  • クラスの継承(extends)
  • クラスの抽象化(abstract)
  • クラスのコンストラクタ(__construct)
  • クラスで静的メンバを使用する(static)
  • クラス内で定数を使用する(const)
  • 例外を指定する(exception)
  • クラスのプロパティを取得する(get_class_vars)
  • クラスが定義済みか確認する(class_exists)


クラスはプログラムを扱う上で、基本的な処理となりますので使い方はしっかりと覚えておきましょう。もし、クラスを使用する方法を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら