【问题标题】:What is different between $this-> and parent:: in OOP PHP?$this-> 和 parent:: 在 OOP PHP 中有什么不同?
【发布时间】:2013-04-28 16:31:56
【问题描述】:

我编写这样的代码给你一个例子

这是使用“$this->”

<?php
class A{
    public function example(){
        echo "A";
    }
}

class B extends A{
    public function example2(){
        $this->example();
    }
}

$b = new B();

echo $b->example2();
?>

这是使用父级::

<?php
class A{
    public function example(){
        echo "A";
    }
}

class B extends A{
    public function example2(){
        parent::example();
    }
}

$b = new B();

echo $b->example2();
?>

OOP PHP 中 $this-> 和 parent:: 有什么不同?

【问题讨论】:

    标签: php oop inheritance super


    【解决方案1】:

    不同之处在于您可以访问基类的函数,而不是当前实现的函数。

    class A {
        public function example() {
            echo "A";
        }
    
        public function foo() {
            $this->example();
        }
    }
    
    class B extends A {
        public function example() {
            echo "B";
        }
    
        public function bar() {
            parent::example();
        }
    }
    

    还有一些测试:

    $a=new A();
    $a->example(); // echos A
    $a->foo();     // echos A
    
    $b=new B();
    $b->example(); // echos B
    $b->foo();     // echos B
    $b->bar();     // echos A
    

    【讨论】:

      【解决方案2】:

      parent::example()调用父类方法,$this-&gt;example()调用当前类方法。

      在您的示例中没有区别,因为 B 类不会覆盖 example() 方法。写这样的东西很常见(也许它会帮助你更好地理解这个概念):

          class A {
      
             public function example(){
                 echo 'A';
             }
          }
      
          class B extends A {
      
             public function example(){
                 echo 'B';
             }
      
             public function example2(){
                $this->example();
             }
      
      
             public function example3() {
                parent::example();
             }
         }
      
      $b = new B();
      
      $b->example2();//print B
      
      $b->example3();//print A
      

      【讨论】:

        【解决方案3】:

        简单来说

        $this 是一个实例引用,所以每当您使用 $this 时,它都会开始引用当前类的方法和属性。

        parent 是一个父引用,可用于访问父类的属性和方法。

        【讨论】:

        • parent 是一个父引用,可以用来访问父类的属性和方法..只要它们是 protectedpublic ;)
        【解决方案4】:

        parent:: 将调用父级的方法或属性。但是,由于 this 引用的是类而不是任何类型的实例,因此您只能调用静态方法或属性。 $this-&gt; 指的是你调用它的对象的当前实例。

        您还可以引用self::,它指的是对象或静态方法中的当前类(同样,此处不涉及实例)。

        【讨论】:

        • parent:: 不是只用来调用静态方法的。
        猜你喜欢
        • 2011-09-23
        • 2011-09-03
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        • 2013-12-05
        • 2010-11-06
        • 2011-04-12
        相关资源
        最近更新 更多