0

燃料PHPを学ぶことで、スコープ解決、またはある意味で::を使用してクラスを呼び出す方法を紹介します。通常、クラスのメソッドを呼び出すときは、これを行います...

$myclass = new myclass();
$myclass->mymethod();

燃料に関しては、メソッドは通常このように呼び出されます...

myclass::mymethod();

両者に違いはないかと思いました。スコープの解決は5.3のアップデートのようなものですか...そうでない場合、どちらが理想的ですか、またはいつこれらを使用する必要がありますか?

ありがとう。

4

3 に答える 3

3

スコープ解決演算子は、 などのクラス定数::const、 などの静的変数にアクセスするか、 などの::$var静的メソッドを呼び出すために使用されます::method()

http://php.net/manual/en/language.oop5.static.phpを参照してください。

静的メソッドは、それらが定義されているクラスのインスタンスがなくても呼び出すことができます。それらは、staticキーワードを使用してそのクラスで定義されています。

たとえば、CakePHP の静的メソッドの 1 つは次のように定義されています。

class ClassRegistry {
    // ...
    public static function &getInstance() {
        // ...
    }
}

... のように呼び出すことができますClassRegistry::getInstance()

キーワードがないと、その関数を呼び出すstaticためにクラスのインスタンスが必要になります。ClassRegistry

static特に、独自のコードでメソッドを使用することが時々悪い考えになる理由については、こちらで詳細を読むことができます: http://kore-nordmann.de/blog/0103_static_considered_harmful.html

于 2012-10-24T05:38:37.680 に答える
0

静的呼び出しが存在する理由と、それが舞台裏で何をしているのかを理解する最善の方法は、この FuelPHP ブログのエントリを確認することだと思います: http://fuelphp.com/blog/2011/05/why-did-you-do-それ

明らかな違いは、最初のソリューション$myObject->myMethod()が動的呼び出しであることです。実行するにはインスタンスが必要ですmyMethod()

2 番目の解決策MyClass::myMethod()は、静的呼び出しです。クラスは、関数が属する一種の名前空間として機能します。そのためのインスタンスは必要ありません。

于 2012-10-24T07:18:39.513 に答える
0

クラスmyclass::mymethod();を呼び出すときにのみこのような構文を使用するため、どのように機能するかはわかりません。STATIC

MyClass::DoSomething();

DoSomething() という名前の静的メソッドを呼び出します

その間

$instance = new MyClass();

$instance->DoSomething();

インスタンスメソッドを呼び出します。

私はそれをテストしていませんが、テストするとエラーが発生すると思います$instance::DoSomething()

于 2012-10-24T05:38:07.940 に答える