有人能说出mysqli->commit
和mysqli::commit
之间的区别吗?
this page中的标头为mysqli::commit
,但在示例中,它们使用mysqli->commit
。
答案 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。