[英]Difference between “->” and “::” in PHP MySQLi OOP
->
在引用对象的成员时使用。
::
是范围解析运算符 ,用于引用类的静态成员。
考虑以下课程:
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
这是类的一个实例mysqli
,你会打电话commit
说$m->commit()
或者你可以说静态调用commit MySQLi::commit()
::访问类的函数而不实例化对象。
->
运算符用于对象属性 。
::
运算符用于类属性 。
在mysqli-> commit中,mysqli是MySQLi的一个实例,在mysqli :: commit中调用一个静态方法
mysqli-> commit是一个公共函数,mysqli :: commit是一个静态函数,两个是mysqli类的php对象表示法。
通常在php.net文档中::表示此类具有该方法。 对于实际使用,您必须遵循示例,因此请使用 - > sintax。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.