28

谁能说出和之间的mysqli->commit区别mysqli::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();

但是会::用来调用 functon fizz(),因为它是一个静态成员(不需要调用类的实例的成员):

FooBar::fizz();

此外,虽然我们在讨论静态成员与实例化成员之间的区别,但您不能使用它$this来引用静态成员中的当前实例。您可以使用self(无前导$)来引用当前类,或者parent如果您想引用父类,或者如果您有幸使用 PHP 5.3.0 static(它允许后期静态绑定)。


该文档用于::引用类中的函数,因为标题中的类名不是该类的实例。仍然使用相同的示例,引用该函数的文档条目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通过说调用$m->commit(),或者你可以通过说静态调用 commitMySQLi::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 的一个实例,在 mysqli::commit 中调用一个静态方法

于 2009-08-07T14:42:54.700 回答
0

mysqli->commit 是一个公共函数,mysqli::commit 是一个静态函数,两者都是 mysqli 类的 php 对象表示法。

于 2009-08-07T14:43:28.817 回答
0

通常在 php.net 文档中 :: 表示该类具有该方法。对于实际使用,您必须按照示例进行操作,因此请使用 -> sintax。

于 2009-08-07T14:44:21.687 回答