谁能说出和之间的mysqli->commit
区别mysqli::commit
?
此页面中的标题是mysqli::commit
,但在他们使用的示例中mysqli->commit
。
->
在引用对象的成员时使用。
::
是范围解析运算符,用于引用类的静态成员。
考虑以下类:
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();
::
用于静态方法。
->
如果您已经拥有实例,则用于对象的方法。
如果你有一个对象的实例,你可以使用 -> 来引用这个实例中的一个方法:
$foo = new Foo();
$foo->bar();
使用 :: 调用静态方法而无需创建对象的实例:
Foo::bar();
静态方法不能通过 引用它的当前实例$this
,但可以通过使用引用自身(当前类)self
。
::
指定静态(类)方法,无需实际实例化对象即可调用。->
指定实例(对象)方法,您需要实例化对象才能使用该方法。
例如,如果你有一个变量$m
是 class 的一个实例mysqli
,你可以commit
通过说调用$m->commit()
,或者你可以通过说静态调用 commitMySQLi::commit()
:: 在不实例化对象的情况下访问类的功能。
->
运算符用于对象属性。
::
运算符用于类属性。
在 mysqli->commit 中,mysqli 是 MySQLi 的一个实例,在 mysqli::commit 中调用一个静态方法
mysqli->commit 是一个公共函数,mysqli::commit 是一个静态函数,两者都是 mysqli 类的 php 对象表示法。
通常在 php.net 文档中 :: 表示该类具有该方法。对于实际使用,您必须按照示例进行操作,因此请使用 -> sintax。