簡體   English   中英

家長在孩子最佳實踐中的PHP調用函數

[英]PHP call function from parent in child best practice

我有一個關於PHP從子類的父類調用函數的技巧問題。 我們有3種情況,我希望有利弊。

<?php
class test{
   private $var ;
   public function __construct(){
    $this->var = 'Hello world';
   }

   public function output(){
      echo $var.'<br>';
   }
}
//scenario 1
class test1 extends test{
   public function __construct(){
    parent::__construct();
   }
   public function say(){
    parent::output();
   }
}
//scenario 2
class test2 extends test{
   public function __construct(){
    test::__construct();
   }
   public function say(){
    test::output();
   }
}
//scenario 3
class test3 extends test{
    private $handle ;
    public function __construct(){
     $this->handle = new test();
    }
    public function say(){
     $this->handle->output();
    }
}
//finally I can call any 3 cases by one of the below codes
$test1 = new test1();
$test1->say();
//or
$test2 = new test2();
$test2->say();
//or
$test3 = new test3();
$test3->say();
?>

是否有最佳實踐,或者這三種方案中的任何一種都比其他方案更好?

先感謝您。

1)是正確的

2)不正確地調用該方法,就像靜態方法一樣。

3)它在構造函數中沒有任何擴展和創建的意義。

1)這是正確的,因為它從其方法中調用父對象。

class test1 extends test{
   public function __construct(){
    parent::__construct();
   }
   public function say(){
    parent::output();
   }
}

2)這里的繼承是不必要的。 如果選擇此實現,則必須將output和構造方法都更改為靜態。

//scenario 2
class test2 extends test{
   public function __construct(){
    test::__construct();
   }
   public function say(){
    test::output();
   }
}

3)從這里繼承也是不必要的。 請注意,此處使用的是“組件繼承”模式,這是一個好習慣,因為它提供了更大的靈活性,但是您必須刪除“擴展測試”。

//scenario 3
class test3 extends test{
    private $handle ;
    public function __construct(){
     $this->handle = new test();
    }
    public function say(){
     $this->handle->output();
    }
}

暫無
暫無

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

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