43

staticこれは、そのプロパティ/メソッドを使用できるようにするためにオブジェクトをインスタンス化する必要がないことを意味していることを理解しています。また、これがプライベート プロパティとメソッド、およびパブリック メソッドにどのように適用されるかについても理解しています。私が理解しようとしているのは、静的プライベート関数があなたにもたらすものです。例えば:

class Beer {
    static private $beertype = "IPA";

    private function getBeerType() {
            return self::$beertype;
    }

    static public function BeerInfo() {
            return self::getBeerType();
    }
}

print Beer::BeerInfo() . "\n";

プライベート メソッドgetBeerType()は、静的なパブリック メソッドから呼び出されている限り、インスタンス化されたオブジェクトがなくても問題なく実行されます。静的パブリック メソッドがすべてのプライベート メソッド (静的および非静的) にアクセスできる場合、メソッドを静的プライベートと宣言する利点は何ですか?

厳密なエラー報告をオンにすると、静的にする必要getBeerType()があるという警告が表示されますが、それでもコードを実行できます。そして、私は少し調査を行いましたが、他の言語 (Java) では、静的なパブリック メソッドによって呼び出されたときに、プライベート メソッドを静的として宣言する必要があるようです。PHP を使用すると、これを回避できるように見えます。エラーをスローして実行しないようにする方法はありますか?

4

7 に答える 7

41

静的プライベート メソッドは、クラスの外部から静的コードを隠す方法を提供します。これは、いくつかの異なるメソッド (静的かどうかに関係なく) がそれを使用する必要がある場合 (コードの再利用など) に役立ちます。

静的メソッドおよび静的変数 (クラス メソッドおよびクラス変数とも呼ばれる) は、コードとデータを一種の名前空間に配置する方法です。クラス変数は、ゼロ、1 つ、または多数のクラスのインスタンスではなく、(定義により) 正確に 1 つ存在するクラス自体に関連付けられた変数と考えることができます。クラスメソッドとクラス変数は、すべてのインスタンスで同じままであるだけでなく、実際には同じである属性を操作するのに役立ちます。

クラス変数の例は、ORM エンティティ オブジェクトのデータベース ハンドラです。すべてのインスタンスは独自のオブジェクトですが、それらはすべて、自身をロードおよび保存するために同じデータベース ハンドラにアクセスする必要があります。

プライベートとパブリックはまったく別の性質であり、あなたがつまずいていると思われます. プライベート メソッドを呼び出すことはできず、クラス外のコードからプライベート変数にアクセスすることはできません。プライベート メソッドは通常、オブジェクトの外部からアクセスしてはならない "内部" ロジックをオブジェクトに実装するために使用されます。この制限は、クラス メソッドだけでなく、インスタンス メソッドでも必要になる場合があります。

プライベート クラス メソッドの例としては、ファクトリ メソッドがあります。提供されるパラメーターが異なる可能性があるオブジェクトを作成するための 3 つのファクトリ コールが存在する場合があります。それでも、操作の大部分は同じです。そのためprivate static、非プライベート ファクトリ メソッドが呼び出すメソッドに入ります。

于 2012-07-16T00:54:57.653 に答える
7

静的とは、そのプロパティ/メソッドを使用できるようにするためにオブジェクトをインスタンス化する必要がないことを意味します。

静的なものはすべて存在します。グローバルに。

また、これがパブリック プロパティとメソッド、およびパブリック メソッドにどのように適用されるかを理解しています

グローバル変数と標準グローバル関数を作成することを理解していますか?

私が理解しようとしているのは、静的プライベート関数があなたにもたらすものです。

privateは、可視性Docsの単なる指定子です。これにより、可視性を制御できます。

それは役に立ちますか?ユースケースによります。

于 2012-07-16T01:09:07.850 に答える
4

クラス内のprivate static functionいくつかの関数で繰り返し操作がある場合は、 a を宣言できると簡単に言いました。public static

当然のことながら、経験の浅いプログラマーや OOP に慣れていない場合、コードに制限を加えるのは奇妙に思えます。しかし、このように厳密に宣言すると、コードがよりクリーンになり、保守が容易になります。大規模なプロジェクトや複雑なクラスでは、関数から何を期待し、どのように使用できるかを正確知ることができます。

ここに良い読み物があります:単一責任の原則神のオブジェクト

于 2013-01-11T13:10:54.967 に答える
4

コードは機能しますが、厳密な標準エラーがスローされます。

厳格な基準: 非静的メソッド Beer::getBeerType() を静的に呼び出すべきではありません

したがって、ここで を使用しますprivate static

于 2012-07-16T00:50:46.767 に答える