访问方法有什么区别 - >并访问方法::

时间:2012-09-06 05:32:26

标签: php methods call

使用->::

调用方法的基本区别是什么
 class a 
  {
    function b()
     {
         echo "abc"; 
     }
  }

这两者有什么区别?

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

3 个答案:

答案 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)在实例方法中可用

由于