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

これは親を使用しています::

<?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::の違いは何ですか?

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->これを呼び出すオブジェクトの現在のインスタンスを参照します。

self::オブジェクトまたは静的メソッド内で、現在のクラスを参照するものを参照することもできます(繰り返しますが、ここではインスタンスは含まれません)。

于 2013-04-28T16:36:24.663 に答える