簡體   English   中英

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

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

這是使用父::

<?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 ::之間有什么不同?

不同之處在於您可以訪問基類的功能而不是庫存實現。

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父引用 ,可用於訪問父類屬性和方法。

parent::將調用parent::方法或屬性。 但是,由於這是引用類而不是任何類型的實例,因此您只能調用靜態方法或屬性。 $this->指的是你調用它的對象的當前實例。

您還可以在對象或靜態方法中引用self:: which引用當前類(再次,此處不涉及實例)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM