人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

?クラス名::関数()

という呼び出し方と、

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

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

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

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

●質問者: mgaki
●カテゴリ:コンピュータ インターネット
✍キーワード: Class object PHP クラス 関数
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tombe
●60ポイント

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

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


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

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

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

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

◎質問者からの返答

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

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


2 ● kazu1107
●10ポイント

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からも参照できます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ