0

たとえば、私はクラスを持っています

class MyClass
{
    public $something = 'base';

    public function __construct()
    {
        $something = 'construct';
    }

    public function __destruct()
    {
        $something = 'destruct';
    }

    public static doSomething()
    {
        $return = new MyClass;
        echo $return->something;
    }
}

それで、私の質問はこれです... オブジェクトをインスタンス化せずに静的メソッドを実行すると、コンストラクターが実行されますか? たとえば、コンストラクターにデータベース接続情報がある場合、クラスを明示的にインスタンス化してクエリを返す静的メソッドを実行できますか?

前もって感謝します

4

4 に答える 4

1

はい、あなたの例では構造が呼び出されます。すでにコードがあるので、テストするのは簡単だと思います。

于 2012-07-11T06:00:00.040 に答える
0

質問が正しくありませんでしたが、答えは、オブジェクトがインスタンス化されている限り、静的メソッド内であってもコンストラクターが実行されるということです。デコンストラクターはクラスへの最後の呼び出しの後まで起動しないため、出力はコンストラクターにあるものになります。

質問で混乱して申し訳ありません。

于 2012-07-31T06:50:34.543 に答える
0

私は PHP の知識が不足していますが、他の OO 言語と比較すると、静的メソッドに MyClass の新しいインスタンスを作成するように指示するため、もちろんコンストラクターを実行します。

新しい SomeOtherType を呼び出した場合も同様です。コード自体は、それが static/public/private メソッド内にあるかどうかを気にしません。new が存在する限り、コンストラクターが呼び出されます。

于 2012-07-11T06:02:10.267 に答える
0

MyClass::doSomething() を実行すると、MyClass のオブジェクトが作成され、もちろんそのコンストラクターが呼び出されます。実行して結果を確認してみませんか?

于 2012-07-11T06:00:10.763 に答える