区别于-&燃气轮机&引用;“和”:&引用;在PHP MySQLi OOP中
有人能说出区别于-&燃气轮机&引用;“和”:&引用;在PHP MySQLi OOP中,php,mysql,oop,mysqli,Php,Mysql,Oop,Mysqli,有人能说出mysqli->commit和mysqli::commit之间的区别吗 中的头是mysqli::commit,但在示例中,它们使用mysqli->commit,:访问类的函数而不实例化对象。::用于静态方法 ->用于对象的方法(如果您已经有实例)。操作符用于对象属性 :操作符用于类属性。在mysqli->commit中,mysqli是mysqli的一个实例 在mysqli::commit中调用静态方法如果您有一个对象的实例,可以使用->引用该实例中的方法: $foo = new Foo
mysqli->commit
和mysqli::commit
之间的区别吗
中的头是
mysqli::commit
,但在示例中,它们使用mysqli->commit
,:访问类的函数而不实例化对象。::
用于静态方法
->
用于对象的方法(如果您已经有实例)。操作符用于对象属性
:
操作符用于类属性。在mysqli->commit中,mysqli是mysqli的一个实例
在mysqli::commit中调用静态方法如果您有一个对象的实例,可以使用->引用该实例中的方法:
$foo = new Foo();
$foo->bar();
Using::调用静态方法而不必创建对象的实例:
Foo::bar();
静态方法不能通过
$this
引用其当前实例,但可以引用自身(当前类)通过使用self
mysqli->commit是一个公共函数,mysqli::commit是一个静态函数,这两个函数都是mysqli类的php对象符号。通常在php.net文档中::表示该类具有该方法。对于实际使用,您必须遵循下面的示例,因此使用->sintax。:
指定一个静态(类)方法,该方法可以在不实际实例化对象的情况下调用<代码>->指定一个实例(对象)方法,需要实例化一个对象才能使用该方法
例如,如果您有一个变量
$m
,它是类mysqli
的一个实例,那么您可以通过说$m->commit()
来调用commit
,或者您可以通过说mysqli::commit()
->
在引用对象的成员时使用
:
是,用于引用类的静态成员
考虑以下类别:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
您可以使用->
调用函数buzz()
:
$myFooBar = new FooBar();
$myFooBar->buzz();
但是将使用:
调用functonfizz()
,因为它是一个静态成员(不需要调用类实例的成员):
另外,当我们讨论静态成员与实例化成员之间的区别时,您不能使用
$this
引用静态成员中的当前实例。您可以使用(无前导的$
)来引用当前类,或者如果您想引用父类,或者如果您喜欢使用PHP5.3.0(允许后期静态绑定)
文档使用
::
引用类中的函数,因为标头中的类名不是该类的实例。仍然使用相同的示例,引用函数buzz()
的文档条目将使用以下标题:
FooBar::buzz
但是,除非文档指定它是静态成员,否则您需要在实例上使用->
来调用它:
$myFooBar = new FooBar();
$myFooBar->buzz();
使用范围解析运算符调用非静态成员会在PHP<5.3.0中引发E_STRICT,在PHP>=5.3.0中引发E_警告。并且存在
self
以在静态上下文中引用当前类。它不引用实例,而是引用自身:class A{static function b(){self::c();}私有静态函数c(){echo'hello';}代码>即将发布,但这是非常正确的。简言之,对约翰的回答没有区别。正如Andrew在PHP手册中所述,将类方法描述为ClassName::methodName是一种惯例,其目的是将is用作对象,即$name->commit(),除非文档中另有说明。这个答案令人惊讶。如何做FooBar::fizz()->选择(“某物”)->在哪里(“某物”);
$myFooBar = new FooBar();
$myFooBar->buzz();