“ - >”之间的区别和PHP:MySQLi OOP中的“::”

时间:2009-08-07 14:39:03

标签: php mysql oop mysqli

有人能说出mysqli->commitmysqli::commit之间的区别吗?

this page中的标头为mysqli::commit,但在示例中,它们使用mysqli->commit

9 个答案:

答案 0 :(得分:68)

在引用对象的成员时使用

->

::Scope Resolution Operator,用于引用类的静态成员。

考虑以下课程:

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(无前导$),或者如果您想引用父类,或者如果您有兴趣使用PHP,则使用parent 5.3.0,static(允许后期静态绑定)。


文档使用::来引用类中的函数,因为标题中的类名不是类的实例。仍然使用相同的示例,引用函数buzz()的文档条目将使用以下标题:

FooBar::buzz

但除非文档指定它是静态成员,否则您需要在实例上使用->来调用它:

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

答案 1 :(得分:5)

::用于静态方法

如果您已有实例,则

->用于对象的方法。

答案 2 :(得分:4)

如果您有对象的实例,请使用 - >引用此实例中的方法:

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

使用::调用静态方法而不必创建对象的实例:

Foo::bar();

静态方法不能通过$this引用它的当前实例,但可以使用self引用自身(当前类)。

答案 3 :(得分:1)

::指定一个静态(类)方法,该方法可以在不实际实例化对象的情况下调用。 ->指定一个实例(对象)方法,您需要一个实例化的对象才能使用它。

例如,如果您的变量$m是类mysqli的实例,则可以通过说commit来调用$m->commit(),或者您可以调用commit静态地说MySQLi::commit()

答案 4 :(得分:0)

::访问类'函数而不实例化对象。

答案 5 :(得分:0)

->运算符用于对象属性

::运算符用于类属性

答案 6 :(得分:0)

在mysqli-> commit中,mysqli是MySQLi的一个实例 在mysqli :: commit中调用静态方法

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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