phpでクラスを呼び出す場合の質問です。


①クラス名::関数()

という呼び出し方と、

②$object = new class
 $return = $object->関数();

という呼び出し方と二通りありますが、

「①の方法だといろいろと制限がある」
ということを聞きました。

どのような制限があるのか、教えてください。

回答の条件
  • 1人2回まで
  • 登録:2006/05/13 11:10:04
  • 終了:2006/05/20 11:15:03

回答(2件)

id:tombe No.1

tombe回答回数38ベストアンサー獲得回数72006/05/13 12:16:28

ポイント60pt

http://sjc-p.obx21.com/word/jk/classmethod.html

URLはJavaの説明ですが、概念的にはPHPでも同じです。


>①クラス名::関数()

これはクラスメソッドの呼び出しです。

呼び出し側ではインスタンスを生成しなくてもコールできますが、その代わりクラスメソッドの定義の中では $this などのインスタンス関連の変数等が使えません。

("paranet::" などのクラス修飾子は使えます)

id:mgaki

this などのインスタンス関連の変数等・・の

「等」の部分が知りたいです。宜しくお願いします

2006/05/13 19:37:58
id:kazu1107 No.2

kazu1107回答回数199ベストアンサー獲得回数142006/05/14 06:06:21

ポイント10pt

http://e-words.jp/w/E382A4E383B3E382B9E382BFE383B3E382B9.html

インスタンスについて


http://fol.axisz.jp/php/pgstatic%82%C8%83%81%83%93%83o.html

staticメンバについて


クラス内のstatic属性の変数はクラス共通の変数となります。

同じくstatic属性の関数もクラス共通の関数になります。

staticな関数とそうでない関数の違いは、引数にあります。

たとえばclassにstaticなメンバ関数「a_func(a,b)」と、そうでないメンバ関数「b_func(a,b)」があったとして、以下のソースを実行した場合・・・

$object = new class;

$object->a_func(1,2);

$object->b_func(1,2);

↓内部的には・・・

$object = new class;

class::a_func(1,2);

class::b_func($object,1,2);

と、勝手に$objectの内容が送られているはずで、これは$thisとして受け取れます。(PHPでの実装はしりませんが概念はC++と同じ)

つまり、インスタンス(メモリ領域)を保たないa_funcはインスタンス中の変数を見たり変更したり出来ないというわけです。a_funcからは$thisも見れないはずです。

ただし例外があって、先にでたstatic属性の変数は同じくインスタンスを保たず、クラスの枠に収められてはいるけど、実体はグローバル変数。インスタンスがあろうが無かろうが常にメモリが確保されているので、b_funcからも参照できます。

制限の説明というより概念の話になってしまいましたが・・・。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません