PHP - OOP - 2. プロパティ

引き続きクラスの定義について学習していきましょう。ここではプロパティについて取り上げます。

プロパティの記述

プロパティとはクラスの中に定義する変数のことです。前節で作成した MyClass.php ファイルをテキストエディタで開いて次のように編集してみましょう。

<?php
class MyClass
{
    public $myProperty;
}

上記のようにクラス定義の {} の中に変数を定義するとプロパティになります。プロパティは変数の名前の前に publicprivate といったアクセス権を合わせて記述します。アクセス権の詳細については後ほど学習することにしましょう。

クラスに定義したプロパティは、インスタンスごとに保持する固有の変数として利用できます。実際に利用方法を見てみましょう。以前に作成した my_class_runner.php ファイルを次のように修正します。

<?php
require_once("MyClass.php");

$myClass1 = new MyClass();
$myClass2 = new MyClass();

$myClass1->myProperty = "Hello";
$myClass2->myProperty = "Bye";

echo $myClass1->myProperty; #=> "Hello"
echo $myClass2->myProperty; #=> "Bye"

上記のプログラムでは new 演算子によって MyClass インスタンスを2つ生成しています。それぞれのインスタンスの参照は $myClass1$myClass2 と2つの変数に代入されており、これらの変数を通じて myProperty プロパティにアクセスできます。ここでは $myClass1 変数の myProperty$myClass2 変数の myProperty に個別の値を保持することができます。

インスタンスのプロパティにアクセスするときは -> 演算子(アロー演算子)を使います。

PHPプログラムの開発($numberプロパティ)

ここでは簡単な計算機クラス( SimpleCalc )クラスにに $number プロパティを追加します。

<?php
class SimpleCalc
{
    public $number;
}

この $number プロパティは計算結果を保持するもので、計算機のディスプレイに表示するデータとして利用します。

現時点では足し算や引き算のような処理は実装していませんので、のちほどこの $number プロパティの詳細な使い方を学習することにしましょう。

続いて実行用のプログラム( calc_runner.php )を修正します。

<?php
require_once("SimpleCalc.php");

$calc = new SimpleCalc();
$calc->number = 10;
echo $calc->number . PHP_EOL;

var_dump($calc);

ここでは SimpleCalc クラスのインスタンスを生成して、インスタンスの持つ $number プロパティにアクセスしています。

$calc->number = 10;

インスタンスの持つプロパティにアクセスするには -> 演算子を使います。このとき変数名の先頭の $ 記号は不要となるので注意してください。その後 echo 命令でプロパティの値を出力し、 var_dump 関数によって SimpleCalc クラスのインスタンスを出力しています。

それではコマンドラインからプログラムを実行してみましょう。

$ php calc_runner.php
10
object(SimpleCalc)#1 (1) {
  ["number"]=>
  int(10)
}

実行結果のように echo 命令による出力結果である 10var_dump 関数による出力を確認できます。また var_dump 関数による出力の詳細を見ると内部に保持している $number プロパティの内容も確認できます。

PHPプログラムの開発(インスタンス固有のプロパティ)

もう少しプロパティの詳細について見ていきましょう。クラスに定義したプロパティ(非 static なプロパティ)はインスタンス固有の変数として利用できます。

PHPは static なプロパティも定義できます。 static なプロパティはインスタンスではなくクラス自身に保持するプロパティとなります。

実行プログラム( calc_runner.php )を次のように修正してみましょう。

<?php
require_once("SimpleCalc.php");

$calc = new SimpleCalc();
$calc2 = new SimpleCalc();

$calc->number = 10;
$calc2->number = 20;

echo $calc->number . PHP_EOL;
echo $calc2->number . PHP_EOL;

var_dump($calc);
var_dump($calc2);

このプログラムでは new 演算子で2つの SimpleCalc インスタンスを生成して、それぞれの $number プロパティに個別の値を代入しています。コマンドラインからプログラムを実行すると次のように表示されるでしょう。

$ php calc_runner.php
10
20
object(SimpleCalc)#1 (1) {
  ["number"]=>
  int(10)
}
object(SimpleCalc)#2 (1) {
  ["number"]=>
  int(20)
}

echo 命令の出力結果から、プロパティはインスタンス固有の変数として機能しているのがわかります。また var_dump 関数の出力結果からも $number がインスタンス( object(SimpleCalc) )の中に保存されているのがわかります。

まとめ

  • プロパティとはクラスの中に定義した変数のこと
  • クラスに定義したプロパティ(非 static なプロパティ)は生成したインスタンスごとに個別に管理される
  • インスタンスのプロパティにアクセスするには -> アロー演算子を使う