0

2 つの質問があります。

1) スコープ解決演算子 ( ::) は静的アクセスに対して遅いですか (または->インスタンス化されたクラスよりも遅いですか)?

名前は、スコープを「解決」する必要があることを示唆しているので、私は尋ねています。

2) オーバーロード、具体的には と についてはどう__get()ですか__set()?

パフォーマンスに全体的な悪影響があると聞いたので、私はそれらの使用を避けてきました.

回答/アドバイスをよろしくお願いします。

4

2 に答える 2

2
  1. 静的メソッド呼び出しの場合、エンジンはクラスと関数を解決する必要があります。これには2回のハッシュルックアップが必要です。

    たとえば、メソッド呼び出しは、エンジンが1つのハッシュルックアップのみを実行します。

    したがって、インスタンスメソッド呼び出しは静的メソッド呼び出しよりも少し高速です。

  2. __getおよび__setには、プロパティルックアップのオーバーヘッド(エンジンは__getまたは__setを呼び出す前にプロパティが存在するかどうかをチェックします)とメソッド呼び出しのオーバーヘッドがあります。

    したがって、これはゲッターまたはセッターを使用するよりも2倍遅く、プロパティに直接アクセスするよりも3〜4倍遅くなります。

于 2011-08-26T17:05:18.073 に答える
2
  1. 私は、静的アクセスよりも約 3% 遅いオブジェクト アクセスをベンチマークしました。
  2. __set($name, $value) のベンチマークは、setBar($value) などの従来のセッターよりも約 97% 遅く、プロパティを直接設定するよりも約 321% 遅くなります。
于 2011-08-26T17:16:27.157 に答える