使用->
和::
class a
{
function b()
{
echo "abc";
}
}
这两者有什么区别?
a::b();
$c = new a; $c->b();
答案 0 :(得分:1)
->
在实例的上下文中执行该方法,而::
在类的静态上下文中访问该方法。后者只能通过self::
访问类的静态成员,而前者也可以通过$this->
使用实例成员。
答案 1 :(得分:1)
定义类时,应明确声明属性和方法的可见性,以及它们是否是静态的。
示例中的类应为:
class A
{
public static function b() {
echo "abc";
}
}
方法b()应该是静态的,因为它不引用任何实例变量。要调用b(),您可以使用:
A::b();
如果您的方法是使用实例变量(非静态属性),那么您的类可能如下所示:
class Foo
{
private $bar; // non static instance variable
public function __construct($bar) {
$this->bar = $bar; // instance variable set in the constructor
}
public function baz() {
echo $this->bar; // instance variable referred to in the non-static method
}
}
然后你会像这样调用函数:
$x = new Foo('abc');
$x->baz();
答案 2 :(得分:0)
a::b();
以上语句用于在类的上下文中调用静态方法(独立于任何对象cotext)因此$ this在静态方法中不可用
$c = new a; $c->b();
上面的声明用于在对象($ c)的上下文中调用实例方法,因此$ this(引用对象$ c)在实例方法中可用
由于