【问题标题】:What is the difference between access a method -> and access a method ::访问方法->和访问方法有什么区别::
【发布时间】:2012-08-30 21:16:36
【问题描述】:

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

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

这两者有什么区别?

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

【问题讨论】:

    标签: php methods call


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在定义你的类时,你应该明确声明你的属性和方法的可见性,以及它们是否是静态的。

      您示例中的类应该是:

      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();
      

      【讨论】:

        【解决方案3】:
            a::b();
        

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

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

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

        谢谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-15
          • 1970-01-01
          相关资源
          最近更新 更多