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

PHP5.3から遅延静的束縛(Late Static Bindings)が使えるようになり、
static::を使うことで静的メソッドが使いやすくなると思います。

それを踏まえた上で下記以外で静的メソッドを使うメリット・デメリット、
また気をつけておきたいことがありましたら教えて下さい。

◎メリット:
インスタンスを作成するよりパフォーマンスがよくなる(はず)
インスタンス作成の手間がいらない

◎デメリット:
->(アロー演算子)が使えない

なお、今回はPHP5.3以降の話でお願いします。
よろしくお願いします。

※URLのみの回答はご遠慮ください

●質問者: xxmasaxx
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:URL インスタンス デメリット パフォーマンス メソッド
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● りゅう
●60ポイント

パフォーマンス面のメリットは無いと考えるべきです。

静的メソッドの呼び出しが早いとされる理由は、メソッドを見つけるためにクラスの継承チェーンを辿っていく必要が無いからですが、遅延静的束縛ではそれが必要になるので、結局インスタンスメソッドの呼び出しと同程度のコストになります。確かにインスタンスを生成しなくても使えますが、それで事足りるのはシングルトンパターンな場合だけなので、たとえインスタンスを生成したとしてもたかだか1回です。この1回が省略できたことでパフォーマンスが大きく変わることはないでしょう。


遅延静的束縛の利点は、静的メソッドをサブクラスで再定義(オーバーライド)できることです。

遅延束縛でない静的メソッドは、クラスという名前空間にある単なる関数でしたが、遅延束縛により普通のメソッドとして利用できるようになったという訳です。これによりPerlやRubyのO/Rマッパでよく使われる、クラスをシングルトンオブジェクトとして活用するというパターンがやりやすくなります。


デメリットというか、罠としては静的フィールドはオーバーライドできないというものがあります。親クラスのフィールドを子クラスで再定義しても、フィールドの実体は親クラスにあるものが使われるため、静的フィールドは親クラスおよび兄弟クラス間で共有する状態になります。子クラスでフィールドの内容を変更したはずなのになぜか親クラスでも変わっていたという事が起ります。


というように、静的フィールドの扱いの面倒さと、シングルトンパターンでしか活用できないという応用範囲の狭さがあるので、積極的に活用するものでもないと思います。

◎質問者からの返答

詳しい説明有り難うございます。とても参考になりました。

自分でも色々試してみましたが、確かに使うのには制約があって面倒ですね。

回答どうも有り難うございました。

関連質問


●質問をもっと探す●



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