0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP-クラス-インスタンス不要で利用できるクラス内の変数

Posted at

はじめに

SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。

プロパティの種類

PHPでは クラス変数 と インスタンス変数 という2種類のプロパティがあります。

  1. インスタンス変数は、インスタンス生成後にアクセスが可能なプロパティです。インスタンス毎に紐づけて値を保持する為、それぞれのオブジェクトで値が異なります。
  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

最後に

問題を解くだけでなく、解説だけでわからないところを調べたり、コードを書き換えてみたりして遊んでみることで、より理解が深まりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?