はじめに
PHPを勉強しているときに「メンバ変数」という表記を目にしました。
過去に少しJavaを勉強していた時があり、「プロパティ」「フィールド」というワードはよく目にしていたのですが、「メンバ変数」はあまり馴染みがなかったのでちょっと調べてみました。
メンバ変数とよく対比される「クラス変数」についても併せて見ていきたいと思います。
( 補足:Javaでも「メンバ変数」ってワードはあるようです。私がたまたま出会わなかっただけみたいです。笑)
メンバ変数
調べて見たところ、__「インスタンス変数 = メンバ変数 = プロパティ」__と説明されているページが多く見つかりました。
参考:
【PHP】インスタンス変数(メンバ変数)
クラスから理解するPHPのオブジェクト指向
【PHP入門】クラスとインスタンスの使い方
ただ、中には
「メンバ変数 = 静的メンバ(クラスメンバ)&動的メンバ(インスタンスメンバ)」
のように、両方とも包含して「メンバ変数」といったニュアンスのページもありました。
その場合、「静的メンバ」「動的メンバ」のようにセットで明記されています。
以上を踏まえると、単に「メンバ変数」とだけ記載されている場合は、__「インスタンス変数 = メンバ変数 = プロパティ」__と受け取って良さそうな気がします。
定義方法
クラス変数
・static修飾子をつける
・「同じオブジェクトから生成されたインスタンス全て」が共通で持つ変数
・newでインスタンスを作成しなくても利用可能
class クラス名 {
static $クラス変数名;
}
インスタンス変数
・static修飾子はつかない(クラス変数と対比)
・インスタンスから呼び出されるため、インスタンスが異なれば別の変数が入る
class クラス名 {
$インスタンス変数名;
}
変数へのアクセス方法
クラス変数
クラス名::$クラス変数名;
インスタンス変数
$インスタンス = new クラス名();
$インスタンス->インスタンス変数名;
(始めこの::
と->
がJavaで見ない表現だったのでなかなか慣れませんでした。)
余談1:「static」と「const」
static
全インスタンス共通で使われる値で、値が変わりうる。(=変数)
const
全インスタンス共通で使われる値で、値が変わらない。(=定数)
const 定数名 = 値; # 定義
self::定数名 # クラス内からアクセス
クラス名::定数名 # クラス外から定数へのアクセス
余談2:「プロパティ」と「フィールド」
今まで似たイメージを持っていたのですが、言語によっては明確な違いがあるようですね。
C言語:
【C#】プロパティとフィールド(メンバ変数)の決定的な違い!
プロパティ?フィールド?メンバー?C#のクラス構造のおさらい
Java:
プロパティとフィールド
ちなみに、PHPの公式ドキュメントには
プロパティ
メンバ変数のことを プロパティ といいます。 それ以外に フィールド などという呼びかたを見たことがあるかもしれません。 しかし、このマニュアルでは プロパティ と呼ぶことにします。
とあるので、PHPは__「プロパティ=フィールド」__というイメージで良さそうです。