What is different between $this-> and parent:: in OOP PHP


What is different between $this-> and parent:: in OOP PHP?

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

使用"$ This ->"

<?php
class A{
    public function example(){
        echo "A";
    }
}
class B extends A{
    public function example2(){
        $this->example();
    }
}
$b = new B();
echo $b->example2();
?>
这是使用parent::
<?php
class A{
    public function example(){
        echo "A";
    }
}
class B extends A{
    public function example2(){
        parent::example();
    }
}
$b = new B();
echo $b->example2();
?>

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

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

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

parent::example()调用父类方法,其中$this->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

简单来说

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

parent是一个父类引用,可以使用public或protected访问修饰符访问父类属性和方法。

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

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