2016-09-12 8 views
-2

私はこのようなクラスを持っています。クラス静的関数がメモリに読み込まれますか?

<?php 

namespace test; 

class Test 
{ 
    public static function static1(){} 
    public static function static1(){} 
    ... 
} 

そして、autoloadはpsr-4を使用します。 静的関数のロードはいつメモリにありますか?

  • ロードアウトアウト(インクルード)?私はそれがこれをするとは思わない。
  • test/Test(phpファイルを含む)を使用しますか?
  • を呼び出します。Test.static1(); ?

私の選択肢では、静的機能はnew(もちろんプライベートデータはありません)がなければ使いやすいですが、メモリが増えてパフォーマンスが低下する恐れがあります。

+0

私はあなたが何を求めているのかはっきりしていません。静的メソッドの定義がインスタンスメソッドよりも多くのメモリを必要とするのはなぜですか?また、私的なデータがないとはどういう意味ですか?プライベートな静的プロパティとメソッドを持つことができます。 – Devon

+0

@Devon、コメントありがとう、私はそれが遅く実行され、より多くのメモリを使用する多くの静的メソッドを使用する場合は知りたいですか?そして、静的メソッドがメモリを使用する場合。 PHPファイルを呼び出すかインクルードする?私が静的メソッドを使用する理由は私的なデータではありません。各クラスインスタンスに独自のデータがある場合、静的メソッドを使用することはできません(静的フィールドのみを使用できます)。 – godtail

+0

私はPHPがいつ静的な定義をロードするかを彼が尋ねていると思います。 C++のように、静的クラスは、実行の開始時または終了時に構築され、破棄されます。 PHPは解釈されるので、静的オブジェクトは一度読み込まれると読み込まれると思います。 – bassxzero

答えて

1

免責事項:あなたが聞いている/言っていることは私にはあまり意味がありません。用語を研究し修正し、静的なメソッドやプロパティについて学ぶ必要があります。私はあなたが私的なデータを参照しているとき、実際には "インスタンスのプロパティ"を参照していると思います。

静的メソッドは、インスタンスメソッドより多くのメモリを使用しませんでしたが、そのアイディアを思い付いたかどうかは不明です。クラスのコードは、を含む)のときにコンパイラによってメモリにロードされます。定義(コンパイルされたコード)を除いて、メソッドや関数はメモリを使用しません。メソッドの実行時に消費されるメモリ量は、そのメソッドが何をしているかによってまったく異なります。

メソッドにはプライベートプロパティはなく、クラスにはプライベートプロパティがあり、静的メソッドはプライベートプロパティにアクセスできます。

あなたの目標は、複数のインスタンス間持続し、あなたがインスタンスメソッドの中から静的プロパティにアクセスすることができますプロパティを持つことがある場合:

public function getData() { 
    // self::$data or static::$data represents a static property $data 
    return self::$data; 
} 

あなたの目標は、クラスのインスタンスを1つ持っている場合に存在していつでも、あなたはシングルトンパターンを調べることができます。

静的メソッドとプロパティは、インスタンスのものよりも効率的です。静的メソッドの問題の1つは、テスト可能性が低いことです。静的メソッドを避けたい理由について独自の調査を行うことはできますが、パフォーマンスはその理由の1つではありません。

関連する問題