はじめに
SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。
プロパティの種類
PHPでは クラス変数 と インスタンス変数 という2種類のプロパティがあります。
- インスタンス変数は、インスタンス生成後にアクセスが可能なプロパティです。インスタンス毎に紐づけて値を保持する為、それぞれのオブジェクトで値が異なります。
- クラス変数はインスタンスを生成せずにアクセスが可能なプロパティです。クラス自体に紐づけて値を保持する為、インスタンスに関わらず共通の値が適用されます。
サンプルソース
変数名など一部変更しています。
class User
{
// クラス変数はアクセス修飾子の記述に続けて、static キーワードを用いて定義
public static $userCount = 0; // 変数には値をセットしておく必要あり
public function countUp()
{
// クラス名とクラス変数の間に ::(スコープ演算子)を用いてアクセス
self::$userCount++; // メソッド内(クラス内)では self キーワードを利用 $の記述は不要
}
}
$user = new User(); // インスタンスを生成
$user->countUp(); // クラス内の関数(メソッド)を呼び出す
echo User::$userCount; // クラス変数を出力
出力結果
1
遊んでみよう
class User
{
public static $userCount = 0;
public function countUp()
{
self::$userCount++;
}
}
$user = new User(); // 1度インスタンスを生成すれば
$user->countUp(); // クラス内の関数(メソッド)を呼び出すだけ
echo User::$userCount."\n"; // 出力結果は 1
$user->countUp(); // 2回目のクラス内の関数(メソッド)呼び出し
echo User::$userCount."\n"; // 出力結果は 2
$user->countUp(); // 3回目のクラス内の関数(メソッド)呼び出し
$user->countUp(); // 4回目のクラス内の関数(メソッド)呼び出し
$user->countUp(); // 5回目のクラス内の関数(メソッド)呼び出し
$user->countUp(); // 6回目のクラス内の関数(メソッド)呼び出し
echo User::$userCount."\n"; // 出力結果は 6
出力結果
1
2
6
最後に
問題を解くだけでなく、解説だけでわからないところを調べたり、コードを書き換えてみたりして遊んでみることで、より理解が深まりました。