1

->使用和调用方法之间的基本区别是什么::

 class a 
  {
    function b()
     {
         echo "abc"; 
     }
  }

这两者有什么区别?

  1. a::b();
  2. $c = new a; $c->b();
4

3 回答 3

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();
于 2012-09-06T06:03:32.363 回答
1

->在实例的上下文中执行方法,而::在类的静态上下文中访问方法。后者只能通过 via 访问类的静态成员self::,而前者也可以通过 via 使用实例成员$this->

于 2012-09-06T05:40:00.413 回答
0
    a::b();

上述语句用于在类的上下文中调用静态方法(独立于任何对象上下文),因此 $this 在静态方法中不可用

    $c = new a; $c->b();

上述语句用于在 object($c) 的上下文中调用实例方法,因此 $this(refer to object $c) 在实例方法中可用

谢谢

于 2012-09-06T05:40:50.747 回答