28

誰でも と の違いがわかりますmysqli->commitmysqli::commit?

このページのヘッダーは ですmysqli::commitが、例では を使用していますmysqli->commit

4

9 に答える 9

68

->オブジェクトのメンバーを参照するときに使用されます。

::スコープ解決演算子であり、クラスの静的メンバーを参照するために使用されます。

次のクラスを検討してください。

class FooBar {
    public static function fizz() {
        echo "Fizz";
    }

    public function buzz() {
        echo "Buzz";
    }
}

buzz()次を使用して関数を呼び出します->

$myFooBar = new FooBar();
$myFooBar->buzz();

しかし、これは static メンバー (クラスのインスタンスを呼び出す必要がないメンバー) であるため::、 functon を呼び出すために使用します。fizz()

FooBar::fizz();

また、静的メンバーとインスタンス化されたメンバーの違いについて話している間、静的メンバー内の現在のインスタンスを参照するために使用することはできません。現在のクラスを参照する場合、または親クラスを参照する場合、または PHP 5.3.0 を使用する喜びがある場合(これにより、遅延静的バインディングが可能になります) を使用します。$thisself$parentstatic


ドキュメントは::、ヘッダーのクラス名がクラスのインスタンスではないため、クラス内の関数を参照するために使用します。同じ例を引き続き使用すると、関数を参照するドキュメント エントリbuzz()は次のヘッダーを使用します。

FooBar::buzz

ただし、ドキュメントで静的メンバーであると指定されていない限り、->インスタンスで使用して呼び出す必要があります。

$myFooBar = new FooBar();
$myFooBar->buzz();
于 2009-08-07T14:44:46.927 に答える
5

::静的メソッドに使用されます。

->インスタンスがすでにある場合は、オブジェクトのメソッドに使用されます。

于 2009-08-07T14:42:23.217 に答える
4

オブジェクトのインスタンスがある場合、 -> を使用してこのインスタンス内のメソッドを参照します。

$foo = new Foo();
$foo->bar();

:: を使用すると、オブジェクトのインスタンスを作成せずに静的メソッドを呼び出します。

Foo::bar();

静的メソッドは、 を介して現在のインスタンスを参照できません$thisが、 を使用してそれ自体 (現在のクラス) を参照できますself

于 2009-08-07T14:43:21.827 に答える
1

::オブジェクトを実際にインスタンス化せずに呼び出すことができる静的 (クラス) メソッドを指定します。->インスタンス化されたオブジェクトを使用できるようにする必要があるインスタンス (オブジェクト) メソッドを指定します。

$mたとえば、 class のインスタンスである変数がある場合、と言ってmysqli呼び出すか、 commit と言って静的に呼び出すことができます。commit$m->commit()MySQLi::commit()

于 2009-08-07T14:44:34.853 に答える
0

:: オブジェクトをインスタンス化せずにクラスの関数にアクセスします。

于 2009-08-07T14:41:56.370 に答える
0

->演算子は、オブジェクトプロパティ用です。

::演算子はクラスプロパティ用です。

于 2009-08-07T14:42:25.013 に答える
0

mysqli->commit では、mysqli は mysqli::commit で MySQLi のインスタンスです。静的メソッドを呼び出します。

于 2009-08-07T14:42:54.700 に答える
0

mysqli->commit はパブリック関数で、mysqli::commit は静的関数で、この 2 つは mysqli クラスの php オブジェクト表記です。

于 2009-08-07T14:43:28.817 に答える
0

通常、php.net のドキュメントでは :: は、このクラスにそのメソッドがあることを意味します。実際に使用するには、例に従う必要があるため、-> シンタックスを使用します。

于 2009-08-07T14:44:21.687 に答える