LoginSignup
2
1

More than 1 year has passed since last update.

【PHP初心者】クラス変数とメンバ変数について

Last updated at Posted at 2021-09-21

はじめに

PHPを勉強しているときに「メンバ変数」という表記を目にしました。
過去に少しJavaを勉強していた時があり、「プロパティ」「フィールド」というワードはよく目にしていたのですが、「メンバ変数」はあまり馴染みがなかったのでちょっと調べてみました。

メンバ変数とよく対比される「クラス変数」についても併せて見ていきたいと思います。
( 補足:Javaでも「メンバ変数」ってワードはあるようです。私がたまたま出会わなかっただけみたいです。笑)

メンバ変数

調べて見たところ、「インスタンス変数 = メンバ変数 = プロパティ」と説明されているページが多く見つかりました。

参考:
【PHP】インスタンス変数(メンバ変数)
クラスから理解するPHPのオブジェクト指向
【PHP入門】クラスとインスタンスの使い方

ただ、中には
「メンバ変数 = 静的メンバ(クラスメンバ)&動的メンバ(インスタンスメンバ)」
のように、両方とも包含して「メンバ変数」といったニュアンスのページもありました。
その場合、「静的メンバ」「動的メンバ」のようにセットで明記されています。

参考:
【PHP入門】クラス変数・クラスメソッドを使用する方法(static)

以上を踏まえると、単に「メンバ変数」とだけ記載されている場合は、「インスタンス変数 = メンバ変数 = プロパティ」と受け取って良さそうな気がします。

定義方法

クラス変数

・static修飾子をつける
・「同じオブジェクトから生成されたインスタンス全て」が共通で持つ変数
・newでインスタンスを作成しなくても利用可能

class クラス名 {
    static $クラス変数名;
}
インスタンス変数

・static修飾子はつかない(クラス変数と対比)
・インスタンスから呼び出されるため、インスタンスが異なれば別の変数が入る

class クラス名 {
    $インスタンス変数名;
}

変数へのアクセス方法

クラス変数
クラス名::$クラス変数名;
インスタンス変数
$インスタンス = new クラス名();
$インスタンス->インスタンス変数名;

(始めこの::->がJavaで見ない表現だったのでなかなか慣れませんでした。)

参考:
【PHP入門】PHPのクラス変数とインスタンス変数

余談1:「static」と「const」

static
全インスタンス共通で使われる値で、値が変わりうる。(=変数)

const
全インスタンス共通で使われる値で、値が変わらない。(=定数)

const 定数名 = 値;     # 定義
self::定数名           # クラス内からアクセス
クラス名::定数名         # クラス外から定数へのアクセス

参考:
PHPのstaticプロパティとstaticメソッド、定数

余談2:「プロパティ」と「フィールド」

今まで似たイメージを持っていたのですが、言語によっては明確な違いがあるようですね。

C言語:
【C#】プロパティとフィールド(メンバ変数)の決定的な違い!
プロパティ?フィールド?メンバー?C#のクラス構造のおさらい
Java:
プロパティとフィールド

ちなみに、PHPの公式ドキュメントには

プロパティ
メンバ変数のことを プロパティ といいます。 それ以外に フィールド などという呼びかたを見たことがあるかもしれません。 しかし、このマニュアルでは プロパティ と呼ぶことにします。

とあるので、PHPは「プロパティ=フィールド」というイメージで良さそうです。

2
1
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
2
1