4

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

这是使用“$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 中有什么不同?

4

4 回答 4

11

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

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
于 2013-04-28T16:33:21.893 回答
5

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
于 2013-04-28T16:36:16.857 回答
2

简单来说

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

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

于 2016-04-21T18:29:19.627 回答
0

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

您还可能希望引用self::对象或静态方法中的哪个引用当前类(再次,此处不涉及实例)。

于 2013-04-28T16:36:24.663 回答