PHP - OOP - 2. プロパティ
引き続きクラスの定義について学習していきましょう。ここではプロパティについて取り上げます。
プロパティの記述
プロパティとはクラスの中に定義する変数のことです。前節で作成した MyClass.php
ファイルをテキストエディタで開いて次のように編集してみましょう。
<?php
class MyClass
{
public $myProperty;
}
上記のようにクラス定義の {}
の中に変数を定義するとプロパティになります。プロパティは変数の名前の前に public
や private
といったアクセス権を合わせて記述します。アクセス権の詳細については後ほど学習することにしましょう。
クラスに定義したプロパティは、インスタンスごとに保持する固有の変数として利用できます。実際に利用方法を見てみましょう。以前に作成した 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
命令による出力結果である 10
と var_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
なプロパティ)は生成したインスタンスごとに個別に管理される - インスタンスのプロパティにアクセスするには
->
アロー演算子を使う