->
使用和调用方法之间的基本区别是什么::
class a
{
function b()
{
echo "abc";
}
}
这两者有什么区别?
a::b();
$c = new a; $c->b();
在定义你的类时,你应该明确声明你的属性和方法的可见性,以及它们是否是静态的。
您示例中的类应该是:
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();
->
在实例的上下文中执行方法,而::
在类的静态上下文中访问方法。后者只能通过 via 访问类的静态成员self::
,而前者也可以通过 via 使用实例成员$this->
。
a::b();
上述语句用于在类的上下文中调用静态方法(独立于任何对象上下文),因此 $this 在静态方法中不可用
$c = new a; $c->b();
上述语句用于在 object($c) 的上下文中调用实例方法,因此 $this(refer to object $c) 在实例方法中可用
谢谢