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

28 php mysql oop mysqli

谁能告诉之间的区别mysqli->commitmysqli::commit

此页面中的标题是mysqli::commit,但在他们使用的示例中mysqli->commit.

And*_*ore 68

-> 在引用对象的成员时使用.

::范围解析运算符,用于引用类的静态成员.

考虑以下课程:

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

    public function buzz() {
        echo "Buzz";
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以buzz()使用->以下方法调用函数:

$myFooBar = new FooBar();
$myFooBar->buzz();
Run Code Online (Sandbox Code Playgroud)

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

FooBar::fizz();
Run Code Online (Sandbox Code Playgroud)

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


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

FooBar::buzz
Run Code Online (Sandbox Code Playgroud)

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

$myFooBar = new FooBar();
$myFooBar->buzz();
Run Code Online (Sandbox Code Playgroud)

  • 即将发布,但这是相当有意义的.简而言之,约翰没有区别.正如Andrew在PHP手册中所述的一个约定,将类方法描述为ClassName :: methodName意图是使用is作为对象,即$ name-> commit(),除非在文档中另有说明. (5认同)

eas*_*ent 5

::用于静态方法.

-> 如果您已有实例,则用于对象的方法.