5

比較的単純な質問があります。Google には多くの投稿がありますが、単純に質問に答える投稿が 1 つも見つかりません。

したがって、短い質問は、「1 つのクラスに静的メソッドと非静的メソッドを混在させることは許容されますか?」です。私は本当に「1 つのタイプの方法に固執するのは良い習慣ですか」、または「両方を使用する場合に考慮すべき点はありますか」と尋ねていると思います。

たとえば、冷蔵庫内の食品に対処するクラスを作成する場合、次のうちどれ (または他のもの) が最適なアプローチになりますか?

例 1:

Class Food
{
    public function __construct( $itemName, $itemDescription )
    {
        .... some code for a new item of food ....
    }

    public static function getAllFood()
    {
        .... some code to get all the items in my fridge ....
    }
}

$food = new Food( "apple", "Nice juicy Pink Lady apple" );
Food::getAllFood();

または例 2:

Class Food
{
    public function __construct( $itemName, $itemDescription )
    {
        .... some code for a new item of food ....
    }

    public function getAllFood()
    {
        .... some code to get all the items in my fridge ....
    }
}

$food = new Food( "apple", "Nice juicy Pink Lady apple" );
$food->getAllFood();

前もって感謝します

4

2 に答える 2

5

この場合、例 1 でやろうとしていることはうまくいかないため、例 2 を使用する必要があります。

$food = new Food( "apple", "Nice juicy Pink Lady apple" );
Food::getAllFood(); //static

クラスにハードコードされたものがない限り、食べ物は返されません。コンストラクターで入れたものは、 のインスタンスに入れます$food。ただし、クラス自体Food::getAllFood()を呼び出して取得しています。それは意味がありません。

クラスに静的メソッドを含めることが理にかなっているケースはありますか? はい。接続を保持する db 接続クラスを作成している場合と同様に、特定の DBMS に関連しているが、実際には db への接続をアクティブにする必要がない日付形式メソッドをいくつか公開したいと考えていました。データベースに触れるものはすべて非静的である必要がありますが、既に引き出したデータの一部の変換メソッドは静的である可能性があります。

$db = new JDE_DBClass($connectionString);
$rows = $db->doSelectQuery("select * from whatever");
$date = JDE_DBClass::convertJDE_Date_to_PHP_Date($rows[0]['dateField']);

この場合、db オブジェクトをインスタンス化せずに変換できるようにするために、これを行うことができます。デシベル:

$date = JDE_DBClass::convertJDE_Date_to_PHP_Date('114309');
于 2014-11-04T23:38:53.063 に答える