よくPHPのオブジェクト指向を学んでいると
public function get~~~(){
return $this->~~~;
}
こんな関数を見かけます。
このgetに関して質問なのですが
これはゲッターメソッドというものなのですか?
ググったところ
ゲッターメソッドは
get_
と後ろに「_」をつけると解説してありました。
さらにググると
__get
と後ろに「__」をつけると解説しているサイトも発見しました。
もう何がなんだかわかりません。
どれが本当のゲッターメソッドなのでしょうか?
あと一番始めに書いたgetは
何者なのでしょうか?
e_w_1_kkさん
概念として、オブジェクトのフィールドを取得するためのメソッドが、ゲッターメソッドです。
なので、
public function get~~~(){ return $this->~~~; }
は間違いなくゲッターメソッドです。
最初に概念としてと断りを入れたのは、オブジェクトのフィールドを取得することがその定義であり、その命名規則は限定されません。
つまり、
public function ~~~(){ return $this->~~~; }
や
public function retrieve~~~(){ return $this->~~~; }
という関数を定義すれば、どちらもゲッターメソッドと呼んで差し支えないでしょう。
ただし、可読性を高めるために、一般的には、getから始める名前を使います。
では、getから始めると一意に決まるかと言うと、ときどき話題に上る、「らくだ記法(キャメル記法、キャメルケース)」と「へび記法(スネーク記法、スネークケース)」の問題が残ります。
例えばですが、dataというフィールドを取得するためのゲッターは、
public getData() { return $this->data; }
とも、
public get_data() { return $this->data; }
とも記述される可能性があります。
この辺りは、宗教というか個々人の思いが入り、チームで開発していれば、チーム内では統一した方がいいとは思いますが、どちらが間違いなく優れているというものではないです。
最初に疑問としていた、get_のものは、ヘビ記法の文化で記述されるゲッターなのです。
では、もう1つの疑問は何かというと、マジックメソッドと呼ばれるものです。
詳細は、以下のマニュアルを読んでください。
http://www.php.net/manual/ja/language.oop5.overloading.php#object.get
この__getマジックメソッドはゲッターとして利用することももちろんできますし、それが一般的な利用方法ではありますが、__getで特殊なことをすれば、その限りではありません。
ただ、多くの場合は、ゲッターメソッドの実装に使われることが多いので、これもゲッターメソッドと呼んで問題ないことが多いと思います。
繰り返しになりますが、オブジェクトのフィールドを取得するためのメソッドのことをゲッターメソッドと呼び、特定の記述をするメソッドのことをゲッターメソッドと呼ぶのではありません。
その意味で、getXXXも、get_xxxも、__getもゲッターメソッドとなる可能性があります。
何かの参考になれば。
これまた詳しく解説していただいて本当にありがとうございました!
2012/04/23 14:34:07すいません。マルチポストはもうやめます。w
2012/04/23 14:35:04